rubyを1.8.5から1.8.7にバージョンアップしてみた
そしたらRailsが動かなくなった、という話(泣)。あ、でもちゃんと動くようになりました。
rubyのバージョンアップ
rubyのバージョンは1.8.5でした。OSはCentOSですが、どうやって入れたんだったかな・・・。当時(といってもつい最近ですが)1.8.6が出ているにもかかわらず1.8.5ってことは最初っから入っていたのかも。これを1.8.7-p17にあげます。
あらかじめ古いrubyを消しておきます。
yum remove ruby-libs
yumとかで簡単にアップグレード!ってな感じにはいきそうになかったので、ソースコードをコンパイルしてインストールする方法をとります。まずはソースコードを入手します。
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p17.tar.gz
つぎに解凍。
tar xvzf ruby-1.8.7-p17.tar.gz
makeする。
cd ruby-1.8.7-p17 ./configure make
これで/usr/local以下にインストールされました。/usr/local/bin/rubyだったり、/usr/local/lib/rubyなんかができます。
もともとの1.8.5は/usr以下にインストールされていたので、削除する必要は無かったかもしれません。
ruby -v
ってやると1.8.5と表示されます。あれれ?パスを確認。
env | grep PATH
/usr/local/binの方が/usr/binより先になっているので、パスは問題ないはず。よく分からなくなったので、こんな時は再起動。再起動後に再度バージョンを確認したら今度は1.8.7になっていました。
Rails
ではRailsが動くかどうか確認です。WEBrickの起動。
script/server
すると、gemが無いって旨のメッセージが表示されました(どんなメッセージだったか、ログ取るの忘れてました)。というわけで再度インストール。以前Railsをインストールする時にダウンロードしてきていたのが残っていたので、再度利用。
ruby ruby-gems-1.1.1/setup.rb
で、再度WEBrickを起動。またしてもエラー。
Missing the Rails 2.1.0 gem. Please `gem install -v=2.1.0 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
オーノー。今度はRailsがない!?いわれるがままにコマンド実行。
gem install -v=2.1.0 rails
インストール完了。再度WEBrick起動。エラー変わらず。。そうだ!再起動!!しかし再起動後も同様のエラーメッセージ。。うーむ何かがおかしい。。ここでソースコードを読んだり、デバッグコードを埋め込んだりと色々した結果、分かりました!gemコマンドですが、古い方を利用しているみたいです。
そこで再度gemをインストール。今度はオプションをつけました。
ruby ruby-gems-1.1.1/setup.rb --prefix=/usr/local
こんなコマンドがあります。今回のgemはちゃんと新しくインストールした方のgemを使っているみたいだし、rubyのバージョンも1.8.7になっている♪これを先にやっていれば、古いgemを使っていたことがもっと早く分かったかも。
gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.1.1 - RUBY VERSION: 1.8.7 (2008-06-09 patchlevel 17) [i686-linux] - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/1.8 - RUBY EXECUTABLE: /usr/local/bin/ruby - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /usr/local/lib/ruby/gems/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://gems.rubyforge.org
で、再度WEBrick起動。エラー変わらず。gemが変わっただけでは意味無い訳ね。では今度こそ。Railsを再インストール。しかしエラー。
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- zlib (LoadError)
zlibがない!?古いやつでうまく動いていたんだから探せばあるだろう。
locate zlib
で調べてみると、/usr/lib/ruby/1.8/i386-linux/zlib.soってのが怪しそう。これを新しい方にコピーする。
cp /usr/lib/ruby/1.8/i386-linux/zlib.so /usr/local/lib/ruby/1.8/i686-linux/
再度Railsのインストール。今度はうまくいきました♪
ではWEBrickの起動。エラー。。
/usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb:225:in `require_frameworks': no such file to load -- openssl (RuntimeError)
どうせ一緒でしょう。locateで調べたらまたしてもopenssl.soってのがあったので、コピー。
cp /usr/lib/ruby/1.8/i386-linux/openssl.so /usr/local/lib/ruby/1.8/i686-linux/
これでやっとWEBrick起動。今まで作っていたサンプルアプリも動作確認できました。4時間くらいかかりました・・・。
2008/7/6 追記
script/consoleを起動しようとしたらこれまたエラーでした。
Loading development environment (Rails 2.1.0) /usr/local/lib/ruby/1.8/irb/completion.rb:10:in `require': no such file to load -- readline (LoadError)
上のエラーと同じですね。locateで調べたらreadline.soってのがあったのでコピー。これで動作するようになりました。