すがブロ

sugamasaoのhatenablogだよ

久しぶりに Rails 触ったらエラーでコケた

Rails でちょっとアプリ作ろうかなと思いたった

で、だいぶ触ってなかったので最新バージョンにしてからやろうと思ったわけです。
rails 自身は

sudo gem update rails

でアップデートできた(ちなみに、2.3.5)。

まずプログジェクトを作る

rails -d mysql sample

で、作成されたら sample ディレクトリに移動してから script/server をやったところ・・・

% ./script/server
/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:827:in `report_activate_error': RubyGem version error: rack(1.0.0 not ~> 1.0.1) (Gem::LoadError)
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:261:in `activate'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:68:in `gem'
from /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller.rb:34
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
from /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
from /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
from /opt/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:2
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./script/server:3

こんな感じのエラーになった。
で、エラーを見る限り Rack のバージョンが不足しているようなので*1、updateしてみる。

ここでハマる

update されてインストールされた Rack のバージョンは 1.1.0 。しかし、1.1.0 でも上記エラーがでる。
調べてみると、RubyGems のバージョン指定方法で、 ~>1.0.1 というのは、1.0.1 下一桁が指定バージョン以上なら可能、という意味らしい。
なので、1.0.0 は当然だめで、1.1.0 もバージョンが高すぎてダメ。
じゃあ、いくつならいいんだ。というか、いくつのバージョンなら指定できるのか。

わからない。調べるのめんどうだなぁ・・・。

とか思いながら調べていたら対応方法を発見。以下で、RubyGems と同じバージョンの指定方法で update できた。

sudo gem install rack --version '~> 1.0.1'

こーすることで、 1.0.1 以上で 1.0.x 系の最新がインストールされるようだ。

というわけで

RubyGems の微妙なバージョンアップ方法についてでした。

*1:実際、1.0.0 だった