スパイスな人生

素敵な人生をおくるためのスパイスを届けていきたい、そんな想いで仕事をするspice lifeメンバーブログ

新卒がまたtmixのRailsを4.1に上げた話

いつもtmixをご利用いただき、ありがとうございます。tmixRailsアップグレードを担当しているうなすけです。 4月にRailsのバージョンを4.0に上げた記事を書きましたが、その時点でRails 4.2がリリースされていたのはご存知かと思います。 時代に乗り遅れたくない!ということで、またまた僕がtmixRails 4.1対応をすることにしました。

アップグレード作業

gemのバージョンを上げる

まずはrails 4.1をインストールしないことには始まりません。

gem 'rails', '4.1.11'

さて、この頃、世間ではbundlerのversion 1.10による新機能、BUNDLED WITHについて話題になっていました。ちょうどいいやという気持ちになり、おもむろに

$ gem update bundler
$ bundler -v
Bundler version 1.10.4

と実行して、bundlerのバージョンを上げてしまいました。

synvert

前回に引き続き、synvertのお世話になりました。

$ gem install synvert
$ synvert --sync
$ synvert --run rails/upgrade_4_0_to_4_1

今回、文法の修正こそありませんでしたが、新しくconfig/secrets.ymlができました。秘密にしておきたいトークン達は、ここにまとめることになったようです。 ここに記述する長い文字列は、各環境(development、staging、productionなど)ごとに必要になるようですが、既存のRailsアプリケーションを4.1にアップグレードする際には新しく生成する必要が出てくるかもしれません。tmixでも必要になったので、以下のコマンドで生成しました。

$ bundle exec rake secret

セッションシリアライズ方式の変更

カタカナで書かれるとなんのこっちゃとなるかもしれません。今までのRailsは、セッションのデータをRubyオブジェクトをMarshal(Rubyのオブジェクトを文字列に書き出す方式)によってシリアライズしていました。これが、Rails4.1ではJSON形式でシリアライズするのが標準になりました。 その設定が、config/initializers/cookies_serializer.rbに以下のように記述されています。

Rails.application.config.action_dispatch.cookies_serializer = :json 

ですが、いきなり全てJSONでやりとりさせるようになると動かなくなる部分も出てきます。なので、以下のように指定して、Marshalしなければいけない部分はそのままに、JSONで出来る部分はJSONで処理を行うよう変更しました。

Rails.application.config.action_dispatch.cookies_serializer = :hybrid

outdated syntaxの書き換え

前回アップグレード時にfixできなかったoutdated syntaxがまだ残っており、エラーが出ていました。.find(:all).find(:lock => true)などが残っており、それぞれ.all.lock(true)に置き換えました。 また他にも、Activerecord::Relationからmap!などのミューテーターメソッドが含まれなくなった(本家PullRequest)ことによるエラーも発生したので、.to_aを挟むようにしました。

リリース

今回は、前回の3系から4系に上げる変更よりは軽微なので、確認、リリースも普段のリリースと同様に開発者のみで行いました。前回同様に目に見える変化はありませんが、tmixは確実に、着実に新しく変化しています。 f:id:yu_suke1994:20150713180528p:plain

アップグレードを振り返って :ok_cat:

今回のRailsアップグレードは、前回の「Rails4.0に上げてね」とお願いされた形ではなく、自分から「やるぞ!」と思って作業をはじめました。今後のtmixの戦力として活躍できるように、自分から進んでやりたいことをどんどんやっていこうかと思います。次はRails 4.2にするぞ!!!

f:id:yu_suke1994:20150713180711j:plain