LoginSignup
29
33

More than 5 years have passed since last update.

初めてのRailsアップグレード

Last updated at Posted at 2016-04-28

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

ここでの注意ポイントはエラーが アップグレードに発生したものなのか既存のバグなのか をちゃんと判断できるようにしておかないとあまり意味ないです。なので普段からちゃんとエラーのチェックをしてエラーが無い状態をキープしておかないといけないですね。

スクリーンショット 2016-04-28 13.13.43.png
エラーがあるとslackに通知飛ばします

パフォーマンス監視

アップグレード後にパフォーマンスが落ちては困るので、パフォーマンスも定期的に見ます。そんなに厳密に見る必要はなかったのでzabbixを使ったWebシナリオを作りしなりを完了までの秒数をチェックします。

表示までの秒数を計測したければ
ページ表示速度をPhantomJSで計測してZabbixに記録する
こちらの方法がおすすめ。

スクリーンショット 2016-04-28 13.10.42.png
こんな感じでグラフでみれます。

コードの変更とか

この辺はいろんなところで情報出ているので、今更感はあるのですが今回対応した内容をまとめたいと思います。

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!

29
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
33