Ruby on Rails/Rails 2.0.2にアップグレード http://www.ark-web.jp/sandbox/wiki/295.html
Ruby on Rails/Rails 2.0.2にアップグレード
いくつかはまりどころがありましたので。
- サーバーのOS, Fedra Core 5
- もともとのRuby Gems 0.9.0
手順 †
- まず、Rails 2.0.2にするためには、gemのアップグレードが必要。今回は1.0.1にアップグレード。
最初、$ sudo gem update --system
としたんですが、lib/rubygems/installer.rb:59:5: Unrecognized directive 'env_shebang' lib/rubygems/local_remote_options.rb:29:30: ':' not followed by identified or noyou
のようなエラーが出まくり - Fedoraで、ruby-develのRPMのupdateを適用していないせいらしい。開発サーバーといえど、普段からアップデートを怠ってると、こういうところでハマる
$ sudo yum install ruby-devel -y
参考) Kazu-の気ままにOSS: ApacheとRuby on Railsの連携 - 再度
$ sudo gem update --system
とすると、今度はエラーがでないでgemのインストールはできた。
でも、2.0.2のソースも、古いバージョンのソースもrakeをやろうとすると以下のようなエラー。undefined method `require_gem'
どうやら、0.9.0時代はあった、require_gemというメソッド自体がなくなったらしい。マジか。ずいぶん大胆な仕様変更。
参考) Rails/Gem errors? - Ruby Forum - 参考サイトにあるように、gem pristine --allを実行してみた
$ sudo gem pristine --all Restoring gem(s) to pristine condition... builder-2.1.2 is in pristine condition sqlite3-ruby-1.2.1 is in pristine condition hpricot-0.4 is in pristine condition daemons-1.0.9 is in pristine condition mechanize-0.6.7 is in pristine condition hpricot-0.5 is in pristine condition ...
- これで2.0.2のRailsのrakeは動いた。以前のバージョンのRailsのソースはまだ動かない。これはrailsコマンドで作られた、config/boot.rb内に、require_gemのメソッド呼び出しがあるためらしく、これは、手で直さないといけないらしい orz
$ svn di config/boot.rb Index: config/boot.rb =================================================================== --- config/boot.rb (リビジョン 165) +++ config/boot.rb (作業コピー) @@ -25,7 +25,7 @@ rails_gem = Gem.cache.search('rails', "=#{version}").first if rails_gem - require_gem "rails", "=#{version}" + gem "rails", "=#{version}" require rails_gem.full_gem_path + '/lib/initializer' else STDERR.puts %(Cannot find gem for Rails =#{version}:
これで動いた
参考) undefined method `require_gem' for main:Object - 夜の Discovery
tag: Ruby on Rails