rails consoleで日本語を使えるようにする
ちょっとしたコードの確認等でrails consoleを使うことが多いのだけれど、日本語を入力すると勝手に文字コードに変換されてしまっていた。
例えばコンソールで全角スペースを入力すると「U+FFE3」と表示される*1。
今まではそんなにコンソールで日本語を使わなかったので放置していたが今後日本語を使いそうなのでどうにかすることにした。
検索してみると次のようなページを見つけた。
Mac OS X Lion で rvm 管理下の Ruby の irb で日本語が文字化けするのを直した | EasyRamble
readlineというものをインストールしてからrubyをインストールし直せば良いらしい。
自分のローカル環境は以下の通り。
readlineのインストール
まずは上記のページに書いてある通りにコマンドを実行。
rvm pkg install readline rvm reinstall all --force
Ruby 1.8.7はインストールされたが残りはエラーでインストールされなかった。
1.9.2は今は使っていないので1.9.3だけ指定してインストール。
rvm reinstall 1.9.3
ここでインストールできていれば簡単な話だったのだけれどエラーでインストールできなかった。
エラーログを見てみるとreadlineのコンパイルに失敗している模様。
readlineのディレクトリを指定してRubyをインストール
エラー内容で検索するとHomeBrewでreadlineをインストールするだの--with-readline-dir="path/to/readline"をインストールコマンドに付けろだの、いろいろな解決方法が見つかったがどれも自分の環境ではうまく行かず、結局うまく行ったのは次のページの方法だった。
Add Readline support to Ruby on Mac OS X · guard/guard Wiki
このページの「Using RVM」の通りにするとRubyがインストールできた。
結局、「~/.rvm/user/db」ファイルに「ruby_configure_flags=--with-readline-dir="$rvm_path/usr"」と記述するのが自分の環境では正解だったようだ。
bundlerでnative componentを再インストール
Rubyの再インストールができたのでrails consoleを起動してみる…と以下のようなエラーで起動できない。
/path/to/application/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:in `require': dlopen(/path/to/application/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle, 9): Library not loaded: /path/to/user/.rvm/rubies/ruby-1.9.3-p327/lib/libruby.1.9.1.dylib (LoadError) Referenced from: /path/to/application/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle Reason: image not found - /path/to/application/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.7/lib/sqlite3/sqlite3_native.bundle ...
これも調べてみると次のページが見つかった。
Rails, pow and Library not loaded: /usr/local/lib/libsqlite3.0.8.6.dylib - Stack Overflow
要するにRubyが変わったからnative componentのgemをインストールし直せということらしい。
bundlerでgemを指定して再インストールする方法がわからなかったので次の手順で行った。
- Gemfileからエラーの発生したgemの記述をコメントアウトする
- bundle cleanを実行してコメントアウトしたgemをアンインストールする
- Gemfileを元に戻してbundle installを実行し、gemをインストールする
- rails consoleを起動してみてエラーが無くなるまでこれらの手順を繰り返す
自分の場合、sqlite3とdeviseをインストールし直すとコンソールを起動できた。
まだ十分な動作確認ができている訳ではないけれどひとまずrailsが起動するようになったのでここまでの手順をメモしておく。
簡単な再インストールのはずが面倒で時間のかかる事態になってしまって困ったがなんとか解決できて良かった…