Edited at

Rails 5へのアップグレードでやったこと。

More than 1 year has passed since last update.

(社内LT用の資料としてざっとまとめました。)

質問とかあればコメントでお願いします。



概要

Rails4.2 => Rails5.0 へのアップグレード頑張った。



やったこと


  • アップグレード用のブランチを用意

  • Rubyを2.2以上にする。

  • bundle update rails が完了できるまで頑張る。

  • Rails5標準の実装に変更する。(Rails5 アップグレードガイドとリリースノートを見つつ)

  • テストが実行できるまで、gem を update したり、パッチ当てたり頑張る。

  • 落ちてるテストをひたすら修正する。

  • deprecation warning を出している gem をアップデート

  • rails s で モンキーテストする。



アップグレード用のブランチを用意

間違ってもmasterにアップデートコミットを積まないように。



Ruby2.2 以上にアップデートする。

rbenv で 2.3.1 に切り替える。

Gemfileでrubyディレクティブを使ってバージョンを指定するのがおすすめ。

ruby '2.3.1'



bundle update rails が完了できるまで頑張る。

Gemfile で gem 'rails', '5.0.0' に書き換えて、bundle update railsを実行。

バージョンの競合とかで色々、エラーになって進まないので、ひたすら、バージョンの整合性を整えつつ、update する gem を追加していく。


【例】

Bundler could not find compatible versions for gem "activerecord":

In Gemfile:
activerecord-session_store was resolved to 1.0.0, which depends on
activerecord (< 5.1, >= 4.0)

rails (= 5.0.0) was resolved to 5.0.0, which depends on
activerecord (= 5.0.0)

seed-fu was resolved to 2.3.5, which depends on
activerecord (< 4.3, >= 3.1)

上記の例だと、seed_fu が activerecord の5.0.0以上のものを利用しているバージョンまで update する必要がある。

最終的に以下のupdateを行った。

bundle update rails act-fluent-logger-rails i18n_generators inherited_resources sass-rails seed-fu default_value_for jquery-rails sinatra



Rails5標準の実装に変更する。 (Rails5 アップグレードガイドとリリースノートを見つつ)

rake rails:update

でアップデートする。

競合するconfig内ファイルはdiffを見て、上書きするかどうか決める。

別ディレクトリに rails new で作成したファイルと比較するのも良い。

後は Rails5 アップグレードガイドリリースノート を見つつ、必要に応じて、ファイルを修正していく。



テストが実行できるまで、gem を update したり、パッチ当てたり頑張る。

テストが無事に実行できるまで、エラーになる gem を修正する。

gem の updateにあたっては以下の手順で対応のバージョン、またはリビジョンを探す。


  1. githubの対応ブランチを探す。

  2. issueやpull reqの状況を確認する

  3. forkする or 捨てる

詳しくは 参考URL を参照すること。



落ちてるテストをひたすら修正する。

頑張れ、超頑張れ!!



deprecation warning を出している gem をアップデート

deprecation warning がなくなるまで、該当箇所を修正したり、gemをアップデートする。

gemのアップデート手順は bundle update のやり方と同じ。



rails s で モンキーテストする。

テストコードが整備されていないようなところは手動でテスト



参考まで