- Gemをアップデート
- Railsをアップデートしずに、バージョンをあげられるgemはあらかじめアップデートしておく
- Gemfileを編集する。gemによってはRails5に対応していない場合があるので、一旦Rails以外をコメントアウト → ひとつずつコメントインしてinstallする → 最後にDiffをチェックする(downgradeしてないか) これが一番速い
vim Gemfile→ 編集する →bundle install→ 繰り返す
- いくつかのgemは修正版がリリースされていないのでgithubから直接DLしてる
例: gem 'sinatra', github: 'sinatra/sinatra', ref: 'a5da6fa82c...' - Deprecatedなエラーが出るgemは直してPR送ってあげる
- この段階ではおそらく
./bin/rails consoleがwarningやエラーを吐きまくるので、一つずつ直していく。
- deprecatedなオプションは削除する。
- 例(他にもdeprecated warningが出るはずなので、ひとつずつ直していく)
config.serve_static_files→config.public_file_server.enabledconfig.static_cache_control→config.public_file_server.headersconfig.middlewareに文字列は渡せなくなった
- 新しいRailsのデフォルト設定を検証する。
./bin/rails rails:updateを叩いてすべてのdefaultファイルを一旦上書きする。その後、各ファイルのDiffを見て必要な部分だけをコピーしてcommitする。rails:updateでは更新されないファイルもあるので、rails newで作成したプロジェクトを見るのも良い
- この頃には
./bin/rails cやテストが走るようになる。テストを直していく。 - modelのテストを修正する
ActiveRecord::Typeを使っている場合はRails5の使い方に置き換えるActiveRecord::Type.lookup(:boolean).cast(value)- ActiveRecord::BaseではなくApplicationRecordを継承する
belongs_toはデフォルト必須項目になる(validates :..., presence: trueと同等)- さよなら
timecop。代わりにActiveSupportのTimeHelpersを使う(travel_to) created_atとかの値はnsecがfloorされるようになったっぽい?
- migrationを修正する
- 過去すべての
db/migrate/*.rbを修正する ActiveRecord::Migrationはバージョン情報も含めて継承する- 大抵は
ActiveRecord::Migration[4.1]orActiveRecord::Migration[4.2]?- いつRailsのバージョンを上げたのかは重要
- 修正作業の検証は、一度
db/schema.rbを消して./bin/rake db:drop db:create db:migrateが動くか試すと良い。(commitはしちゃだめ) - db/schema.rbの中身が変わるため、本番にあげてからdb/schema.rbを作り直す
./bin/rake db:schema:dump RAILS_ENV=staging- ローカルに
db/schema.rb持ってきてdb/schema.rbを上書きする
- controllerのテストを修正する
- warning地獄
- テストでパラメーター, cookie, sessionの渡し方が変わった
get(:show, id: 1)->get(:show, params: { id: 1 }, session: {...}
ActionController::Parameters- Hashを継承しなくなる(
#merge!,#symbolized_keysが無い) permit()されていない場合は、いろいろなところで使えなくなった。(url_forとかActiveRecord)- 無理に使うのではなく
permit()してください
- 無理に使うのではなく
- Hashのメソッドを使いたければ
#to_hを使う。 params.permit(:roles).to_h.merge('default_value' => '1')- キーが文字列なので注意
- Hashを継承しなくなる(
- すべてのテストが通るまで頑張る...