railsのバージョンを v4.0.2 → rails v4.2.6にアップグレード。
そのアップグレードの際にやったことをまとめます。
基本的にはRailsアップグレードガイドにしたがって作業をすればよいです。
http://railsguides.jp/upgrading_ruby_on_rails.html
また対象バージョンのリリースノートも見て、変更点をチェック
http://railsguides.jp/4_2_release_notes.html
まず最初に先人達が残していった記事を読む
変更点や修正内容の確認
SPACE MARKET BLOG
Railsを4.0系から4.1系にバージョンアップした話
http://blog.spacemarket.com/code/upgrade-to-rails-4_1/
Railsを4.1系から4.2系にバージョンアップしました。
http://blog.spacemarket.com/code/upgrade-to-rails-4_2/
Money Forward
エンジンのRailsを4.2にアップグレードした話
https://moneyforward.com/engineers_blog/2015/01/14/rails_4-2_upgrade/
SPACE MARKETさんのブログとMoney Forwardさんのブログ、rails4.2のリリースノートを見て変更点や実際の修正内容を確認します。
とはいえ当然使っているgemとかで影響範囲が違うので、ここは参考程度。
アップグレードにあたっての心構えとか
Qiita
Railsをバージョンアップし続けるために必要なこと
http://qiita.com/joker1007/items/82db0b5d1a7f2572710b
クックパッド開発者ブログ
安心してRailsアップグレードを行うための工夫
http://techlife.cookpad.com/entry/how-to-safely-upgrade-rails
Railsをアップグレードするにあたって、どういう準備をしてどういったことに気をつければよいのか。
結構テストコードがしっかり書いてあることが前提なのですが、悲しいかなテストコードは無いのでテストは人力。
つらい
幸いサービスの規模はそこまで大きくないのでどうにかなります。
でもこういった大きな変更のためにテストコードがあるといいと改めて思いました。
まだ書いてない人がいたら自分の将来のために是非書きましょう。
実際やったこと
クックパッドさんのブログにもありましたが、エラーの監視とパフォーマンスの監視をしておくようにしました。別にここはアップグレードに限った話ではなく普段からやっておいたほうがよいですが。
アップグレード後のエラー監視
サービスの規模が小さいとはいえ、人力テストだけではどうしたって漏れが出る可能性があります。そこでSentryを使ってエラーの発生を監視するようにしました。
RailsでのSentryの設定方法はこちらを参考
http://d.hatena.ne.jp/akishin999/20140324/1395613736
ここでの注意ポイントはエラーが アップグレードに発生したものなのか既存のバグなのか をちゃんと判断できるようにしておかないとあまり意味ないです。なので普段からちゃんとエラーのチェックをしてエラーが無い状態をキープしておかないといけないですね。
パフォーマンス監視
アップグレード後にパフォーマンスが落ちては困るので、パフォーマンスも定期的に見ます。そんなに厳密に見る必要はなかったのでzabbixを使ったWebシナリオを作りしなりを完了までの秒数をチェックします。
表示までの秒数を計測したければ
ページ表示速度をPhantomJSで計測してZabbixに記録する
こちらの方法がおすすめ。
コードの変更とか
この辺はいろんなところで情報出ているので、今更感はあるのですが今回対応した内容をまとめたいと思います。
Gemfile
gem 'rails', '4.0.2' → gem 'rails', '4.2.6'
gem 'nokogiri' , '1.5.11' → gem 'nokogiri' , '~> 1.6.0'
railsのバージョンを変えただけだと怒られたのでnokogiriのバージョンも変更。
この辺りはエラーメッセージをきちんと読めば問題ないはず。
自分の場合は下記のようなエラーメッセージが表示されました。
Bundler could not find compatible versions for gem "nokogiri":
In Gemfile:
nokogiri (= 1.5.11)
rails (= 4.2.6) was resolved to 4.2.6, which depends on
railties (= 4.2.6) was resolved to 4.2.6, which depends on
actionpack (= 4.2.6) was resolved to 4.2.6, which depends on
rails-dom-testing (>= 1.0.5, ~> 1.0) was resolved to 1.0.5, which depends on
nokogiri (~> 1.6.0)
もろもろ変更したらbundle update
設定ファイル系の変更
railsのバージョンが無事にあがったら下記を実行
rake rails:update
config以下にあるファイルを新しいバージョンに合わせて置き換えます。
上書きするかどうかをきかれるのですが、そのまま上書きすると今までの設定内容消えてしまうので、変更の差分だけ見て、必要そうな設定だけを適用していきます。
いくつか追加になったファイルもあります。
ファイル名 | 何者か |
---|---|
config/secrets.yml | config/initializers/secret_token.rbから変更 |
config/initializers/assets.rb | assets周りの設定 http://qiita.com/ryounagaoka/items/8cbe76f2fb7a3157f07c |
古い記述を直す
DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to clarify its role (it merely enables serving everything in the `public` folder and is unrelated to the asset pipeline). The `serve_static_assets` alias will be removed in Rails 5.0. Please migrate your configuration files accordingly. (called from <class:Application> at /vagrant/www.example.com/config/application.rb:21)
こんな警告がでたので、記述の通りapplication.rbを
config.serve_static_assets → config.serve_static_files
としました。
gemの対応
モバイル判定とかできるbrowserというgemを使っていたのですがこれの書き方が変わってました。
browser.mobile? → browser.devise.mobile?
感想
サービスの規模がそれほど大きくないこともあって、思ったよりもすんなりいきました。ちょっとマニアックなgemとかを使ってない限りはそれほど問題はないのかもしれません。
なのでrailsアップグレードやんないとなーって思っている方は別の環境用意してそこで試してみると案外すんなりいくかも。
Let's upgrade!