足の早いrailsのバージョンアップに乗っかる

以前、足の早いrailsのバージョンアップに抵抗する、という記事では、Railsのバージョンアップに流されないようにする方法をまとめましたが、今回はその逆。
Railsのバージョンアップを敢行しようと思います。

Rails1.2.2 -> Rails1.2.6へ

以前、サタデーコードフィーバーに行ったときに、railsで開発をしている人にお会いしました。
そのときに聞いたお話では、rails2.0系に上げる前に、1.2系の最新にして、そこで出た不具合を直してから2.0系に上げるといい、とのこと。

なので、まずは、railsを1.2.6にバージョンアップします。

gem install rails --version 1.2.6 --include-dependencies

を実行します。
おそらく、問題なく終了することでしょう。

次に、前回は1.2.2で動作していたrailsを1.2.6で動作するように変えます。

アプリ上ではどのバージョンでrailsを動かしているかは、プロジェクト直下(Rakefileがあるところ)でscript/aboutコマンドを打つと確認できます。
結果としては、こんな感じで出るんじゃないでしょうか。


About your application's environment
Ruby version                 1.8.5 (i386-mswin32)
RubyGems version             0.9.0
Rails version                1.2.2
Active Record version        1.15.2
Action Pack version          1.13.2
Action Web Service version   1.2.2
Action Mailer version        1.3.2
Active Support version       1.4.1
Edge Rails revision          71
Application root             C:/aptana/workspace/Tokyo24
Environment                  development
Database adapter             mysql

これが確認できたら、environment.rbの9行目を

RUBY:
  1. RAILS_GEM_VERSION = '1.2.6'

と直して、以下のコマンドを打っていきます。

・ rake rails:freeze:edge TAG=rel_1-2-6
・ rake rails:unfreeze -> rake rails:freeze:gems VERSION=1.2.6

どっちかのコマンドを打つとrailsのバージョンが1.2.6に固定されます。
違いは、前者はSubversionを使って取得する方法で、後者は自分のローカルから作る方法であるということ。
今のところ、1.2.6をインストールしたばかりなので、rake rails:unfreezeだけっていうのもアリでしょう。

ただし、ここで注意がひとつ。
Subversionで管理している場合、これを単純に行うと、.svnフォルダごと消去して新しいものを作ってしまうので、コミットができなくなります。
そのため、まずは、ワンクッションおいて、svn上のvendor/rails以下を消してコミットすることを忘れないようにしましょう。

ということで、ここまでの過程で、アプリ側の設定はこうなりました。
(ちなみに、僕は面倒くさがりなので、これはrails:unfreezeしかやらなかったときの結果です。あしからず)


About your application's environment
Ruby version                 1.8.5 (i386-mswin32)
RubyGems version             0.9.0
Rails version                1.2.6
Active Record version        1.15.6
Action Pack version          1.13.6
Action Web Service version   1.2.6
Action Mailer version        1.3.6
Active Support version       1.4.4
Application root             C:/aptana/workspace/Tokyo24
Environment                  development
Database adapter             mysql

修正開始……してみたものの


warning: don't put space before argument parentheses

メソッドと括弧の間を空けない

……あれ、あと、ない? 本当かな??

Rails1.2.6 -> Rails2.0.2へ

ということで、railsを2.0.2へバージョンアップ。

gem install rails --version 2.0.2 --include-dependencies

また、environment.rbの9行目を

RUBY:
  1. RAILS_GEM_VERSION = '2.0.2'

に変えて、アプリの設定をscript/aboutでチェック。


*******************************************************************
* config.breakpoint_server has been deprecated and has no effect. *
*******************************************************************

About your application's environment
Ruby version              1.8.5 (i386-mswin32)
RubyGems version          0.9.0
Rails version             2.0.2
Active Record version     2.0.2
Action Pack version       2.0.2
Active Resource version   2.0.2
Action Mailer version     2.0.2
Active Support version    2.0.2
Application root          C:/aptana/workspace/Tokyo24
Environment               development
Database adapter          mysql

見慣れないものがつきました。
これはこれで追々調べるとして、いろいろと動作確認をしていくことにします。

動作確認してみる

500 Internal Server Error。

一瞬でした。ありがとうございました。
ということで、直したところを淡々とまとめていきます。

ひとつめ。


/!\ FAILSAFE /!\  Sun Apr 20 17:47:44 +0900 2008
  Status: 500 Internal Server Error
  A secret is required to generate an integrity hash for cookie session data. Use config.action_controller.session = { :session_key => "_myapp_session", :secret => "some secret phrase of at least 30 characters" } in config/environment.rb

これは、セッションの管理の仕方が変わったせい。
/tmp/sessionsの中身を消します。
でもって、environment.rbに次の内容を追加(40行目辺りに)。

RUBY:
  1. config.action_controller.session = {
  2.     :session_key => '_TestApplication_session',
  3.     :secret      => '何か30文字のランダムな英数字の文字列'
  4.   }

ふたつめ。
起動時に出ていたこれ。


config.breakpoint_server has been deprecated and has no effect.

これは、/config/environments/development.rbにあった

RUBY:
  1. config.breakpoint_server = true

という記述を消せばおk。

みっつめ。


NoMethodError (undefined method `paginate' for #<xxxxController :0x39e5e28>):

paginateはプラグインに移ったらしいので、プラグインをインストールします。

ruby script/plugin install svn://errtheblog.com/svn/plugins/classic_pagination

これを打とうとしたら、このコマンドを打って、gemのバージョンを上げろとエラーが出たので、そのまま従います。

gem update --system

改めて、最初のコマンドを打つと、無事インストールされます。
ただし、将来的にはwill_paginateというプラグインに変えてくれー、とあるので、それは後で対応することにしましょう(ソースの修正もあるみたいなので)。

ところで、この警告、1.2.6の時点でもdevelopment.logに出てたんですね。
ここを見ろということだったのか、と今さら気づきましたorz

※2008/05/01追記。
これだけだと、gemのupdateはできるけど、rakeがどうも動かなくなります。
正しいgemのアップデートの仕方は、ここをご参考ください。

最後に

/config/environment/*や、/config/routes.rbを2.0.2仕様に上書き、/config/initializerの内容を追加、/script配下の内容を新しいバージョンの内容に更新します(この辺はrails2.0.2で適当にプロジェクトを作ってみて差分を地道に確認してみました)

あとは、

rake rails:update

で、boot.rbやjavascriptがアップデートされるので、それを実行します。
軽くしか動かしてませんが、どうやら無事に動いてくれているみたいです。

ひとまず、ここまででバージョンアップはひととおり終了ですかね。
ローカルでは無事に動くみたいではありますが、もうしばらく様子見と行きたいところですね。

Via:

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加 |

0 Responses to “足の早いrailsのバージョンアップに乗っかる”


  1. No Comments

Leave a Reply