Rails3.0.7から3.2.9へのバージョンアップ方法

Rails 3.0.7のアプリをRails 3.2.9にバージョンアップした際の手順と、発生した問題とその解決方法をこのメモに残します。

1.  Gemfileファイルに記述されているrailsのバージョンを変更する
変更前)gem 'rails', '3.0.7'
変更後)gem 'rails', '3.2.9'

2. Gemfile.lockファイルを削除する
Gemfile.lockファイルには以前のバージョンのgemとその依存関係が記述されているので、このファイルを削除します。

3.  古いgemを消す
[Railsアプリのroot]/vendor/bundle配下にgemをインストールしていた場合は、このディレクトリ以下のファイルを全て消します。

4.新しいGemをインストール
お馴染みの以下のコマンドを実行してGemfileで指定したgemをインストールします。
bundle install --path vendor/bundle

5. bundlerの機能を使ってRails本体の更新
以下のコマンドを実行します。
bundle update rails

6. 設定ファイル等の更新
以下のコマンドを実行します。
bundle exec rake rails:update
そうすると、バージョンアップしたRailsに対応する設定ファイルの変更が各ファイルに反映されます。もしバージョンアップ前後で差異があるファイルがあったならば、上書きするかどうか聞いてきます。「d」キーを押してEnterを押すとバージョンアップ前後での差分が見れますので、それを見ながら判断していくといいでしょう。特にroutes.rbは何も考えずに上書きしてしまうと、自分が編集した内容が初期化されてしまうので要注意です。

 

通常、ここまでRailsのバージョンアップは完了です。
しかしながら、私の環境ではそれ以外も変更しないとうまく動作しなかったので、そのトラブルシューティングを以下に載せておきます。

Gemの追加
Rails 3.1以上からAsset Pipelineの追加やjQueryの標準化が行われたので以下のGemfileに以下の内容を追加しました。

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'execjs'
gem 'therubyracer'

 

Asset Pipelineへの対応
Rails 3.1以上からAsset Pipelineが登場したので、それに合わせた対応が加えて必要でした。具体的にはappディレクトリにassetsディレクトリを作成し、その配下にimages, stylesheets, javascriptsディレクトリを作成しました。そして、stylesheetsディレクトリ配下にapplication.cssを、javascriptsディレクトリ配下にapplication.jsを作成する必要があります。ここでだいぶハマったのですが、application.cssとapplication.jsは更新後のRailsのバージョンのものを使う必要があります。元々あるファイルをコピーするとJavaScriptのライブラリが読み込まれず、destoryアクションを処理できなくなってしまいます。どうやら、ファイルの先頭部分にあるコメント文が関係しているようです。そのため、私は新規にRails 3.2.9のプロジェクトを作成し、そこからapplication.cssとapplication.jsをコピーして使用しました。

Deviseでsign outができなくなったことへの対応
RailsをバージョンアップしたアプリではDeviseを使用しているのですが、バージョンアップ後になぜかsign out(ログアウト)ができなくなってしまいました。いろいろ調べた結果、以下の内容をroutes.rbに記述することで解決できました。

devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です