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ってのがあったのでコピー。これで動作するようになりました。