Rails 4.0.0が出ていたので、3.2.12で動かしているウェブアプリ(このブログ)を4.0.0にアップグレードしてみることにしました。
Rails 4.0: Final version released!
http://weblog.rubyonrails.org/2013/6/25/Rails-4-0-final/
(1) GemfileのRailsのバージョンを4.0.0にする
coffee-rails、sass-railsも4.0.0にしました。
古いrailtiesに依存していてbundle updateが動かないことがあるためです。
(2) 以下のコマンドを実施。
bundle update
rake rails:update
以下、rake rails:updateの作業ログです。
- boot.rbは上書き
- routes.rbはスキップ
- application.rb上書き(このアプリに関してはtime_zoneを指定していただけだったので、あとから追記)
- environment.rb上書き
- initializers/inflections.rb上書き
- initializers/secret_token.rb上書き
- initializers/session_store.rb上書き
- initializers/wrap_parameters.rb上書き
- locales/en.yml上書き
environment下のマージはいつも面倒・・・。そんなに設定をいじっているわけでもないのですが。
■ ソースコードの修正作業ログ
○ routes.rb
matchがまだ残っていたので、getやpostなどに置き換え。
○ mass-assignment対応
以下のように、controllerでホワイトリスト方式で指定するようになりました。
params.require(:hoge).permit(:attr_1, attr_2)
post_params = params.require(:hoge).permit(:attr_1, attr_2)
hoge = Hoge.new(post_params)
○ ActiveRecordのscopeをlambdaで記述
意外にハマるところなので、注意してください。
○ set_table_nameをself.table_nameに変更
これは3.2でdeprecation warningが出ていたものなのでいまさら感が漂いますが。。。
○ turbolinks
これは有効にしませんでした。。。
■ 雑感
メジャーバージョンアップであることを思えば、割と手軽に上げることができました。
scopeが影響範囲が広いので、テスト書いてないとちょっと怖いですね。