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が影響範囲が広いので、テスト書いてないとちょっと怖いですね。


Posted by あかさた
最近のエントリ
最近の読書メモ