(社内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にあたっては以下の手順で対応のバージョン、またはリビジョンを探す。
- githubの対応ブランチを探す。
- issueやpull reqの状況を確認する
- forkする or 捨てる
詳しくは 参考URL を参照すること。
落ちてるテストをひたすら修正する。
頑張れ、超頑張れ!!
deprecation warning を出している gem をアップデート
deprecation warning がなくなるまで、該当箇所を修正したり、gemをアップデートする。
gemのアップデート手順は bundle update のやり方と同じ。
rails s で モンキーテストする。
テストコードが整備されていないようなところは手動でテスト