概要
- あるプロジェクトで
5.2.3
→5.2.5
のアップグレードをする必要あり - メジャーバージョンは変わらずだったので今回は大きな問題なく終えたが手順をまとめておく
手順
基本的にはRails アップグレードガイド - Railsガイドの通り作業をすれば良い
1. Gemのアップデート
GemfileのRailsバージョンを5.2.5
に修正後、以下のコマンドを実行
bundle update
失敗した場合は、該当Gemのバージョンを固定し依存を解決する
2. Railsのconfigファイル群のアップデート
bundle exec rails app:update
configファイルの内、Railsアップグレードに伴う変更があるものについてconflict
するはず
identical config/boot.rb
exist config
conflict config/routes.rb
Overwrite /Users/your_name/project_root/config/routes.rb? (enter "h" for help) [Ynaqdhm]
helpを見てみると
Y - yes, overwrite
n - no, do not overwrite
a - all, overwrite this and all others
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help
m - merge, run merge tool
d
でdiffをみることができるので、もし修正すべきところがあれば修正する。なければn
で進んでOK
ちなみに、以下のようにTHOR_DIFF
を設定するとnvimでdiffを開くことができる。
export THOR_DIFF="nvim -d " # vimの場合は `export THOR_DIFF=vimdiff`
bundle exec rails app:update
nvimでファイルを開いて、古い方のファイルを編集する(新しいファイルから移植すべきところがあれば移植する)。その後、n
を選択すれば古いファイルが残る。(新しいファイルを編集してからY
を押しても最初に提示された新ファイルで上書かれるのでやらないように)
また、THOR_MERGE
変数を設定することによって、m
で編集することもできる(こっちが正統派?今回は上でやってしまった)
export THOR_MERGE="code -d $1 $2"
3. 設定の変更を順次適用していく
上記の手順でconfig/application.rb
ファイルにconfig.load_defaults 5.0
のような記述を加えた場合、Railsは古いバージョン(この場合は5.0
)の設定で動く。
config/initializers/new_framework_defaults.rb
には新しいバージョンの設定が書かれていて、この設定を一行ずつアンコメントしていくことで新しいバージョンの設定を順に適用していくことができる。
例として、以下のような記述があり、これの一番下の行をアンコメントするとこの項目についてアップグレード後の設定が適用されるようになるので、その状態でテストを行う。(テストがなければ手動で動作の確認を行う。)
# Make Active Record use stable #cache_key alongside new #cache_version method.
# This is needed for recyclable cache keys.
# Rails.application.config.active_record.cache_versioning = true
この手順を全設定に対して行い、全てクリアしたらこのファイルは削除して良い。
またconfig/application.rb
内のconfig.load_defaults 5.0
も削除する。
4. その他の作業
3まででバージョンバップは完了。
あとはデプロイするなどして動作確認していき、本番環境で無事動けばOK