最近日本からオーストラリアに帰国しました!新しい会社でまたRails5.1に更新しました。
今回成功しましたが、何で日本の会社でやった時にできなかったとか色々分かってきました!
#rspec使っている?
正直に言うと、日本で働いてたの会社で「rspec」のテストが足りませんでした、手動でテストだけでRails更新するのはとても難しいです。自動テストがシステムの少なくとも80%をカバーしていない場合は、問題が起こりやすいと思います、ご注意ください!(システムがrspecを使ってない場合はほぼ無理です、rspec使ってください。)
##更新の前に
今のプロジェクトはバーション5.0を使っているの確認。そして、rpsec が80%以上システムテストしている状態。
今の使っているgem
が更新の後でまだ使えるかどうかのチェック、
next_rails
の gem
を使って、5.1.7 までにチェックができます。
ターミナルで gem install next_rails
を使いましょう。
バーション5.1.7 に更新したいから、bundle_report compatibility --rails-version=5.1.7
で使っているgem
はまだ使えるかどうかnext_rails
が教えてくられます。
エラーとか合ったら、エラー起こっているのgem
を使えないって言うことになってしまったので、使えなくなったgem
は使わないように、プロジェクトを変更しなきゃあかん。
問題ない場合は、進みましょう。
#Gemfile
Gemfile
の中に2つのライン更新しましょう。
gem "rails", "5.0.x.x"
-> gem "rails", "5.1.7"
gem "activejob", "5.0.x.x"
-> gem "activejob", "5.1.7"
そしてターミナルに bundle exec rails app:update
でいけます!
これはちょっと時間がかかりますが、変わったのファイル全部ご確認してください。
自動で消されてしまうファイルとコードたまにあるので注意ください。
特に
config/environments/
の中
bundle
と secrets.yml
が消されてしまうかも、これは自分のプロジェクト元々に戻そう!
など、、、
簡単?
おめでとう、もう5.1.7に更新できました!!!
けど、、エラーが、、
#たくさんエラーが出ました!?!
5.1からたくさん使えなくなること、変わったこともあるので、rspec
使ったら多分たくさんエラーと注意も出たはずです。
before_action
と after_save
などのフローが変わったし、_changed?
なども使えなくなるやし、これから大変そうですが、ちょっとずっつでコードの更新も行きましょう。
####after_create
+after_update
+after_なんちゃら
の中に
修正前 | 修正後 |
---|---|
attribute_changed? | saved_change_to_attribute? |
attribute_change | saved_change_to_attribute |
attribute_was | attribute_before_last_save |
changes | saved_changes |
changed? | saved_changes? |
changed | saved_changes.keys |
changed_attributes | saved_changes.transform_values(&:first) |
####before_create
+before_save
+before_なんちゃら
の中に
修正前 | 修正後 |
---|---|
attribute_changed? | will_save_change_to_attribute? |
attribute_change | attribute_change_to_be_saved |
attribute_was | attribute_in_database |
changes | changes_to_save |
changed? | has_changes_to_save? |
changed | changed_attribute_names_to_save |
changed_attributes | attributes_in_database |
Hash
を使っている時に.uniq
が使えなくなったので.uniq
-> .distinct
に変更も必要です、Array
の時にしないでね!
Hash
に.compact
も使えなくなった、変わりに.delete_if { |_k, v| v.blank? }
使いましょう。
previous_changes
は使えなくなったので、合ったら違うロジックでコードやり直ししかないです。
#テスト、テスト、テスト、
全部の先に言った更新だけで、エラーはもう消えたはずですが、rspec
で自動テスト数回使って、エラーないを確かめて見てください。
docker-compose run web bundle exec rspec
エラー合ったら、spec
の1個ずっつテストして直しましょう!
頑張ってね!
なんか質問合ったら、是非聞いてください。