LoginSignup
0
0

More than 3 years have passed since last update.

Rails 5.0 から 5.1 に|やり方

Posted at

最近日本からオーストラリアに帰国しました!新しい会社でまたRails5.1に更新しました。
今回成功しましたが、何で日本の会社でやった時にできなかったとか色々分かってきました!

rspec使っている?

正直に言うと、日本で働いてたの会社で「rspec」のテストが足りませんでした、手動でテストだけでRails更新するのはとても難しいです。自動テストがシステムの少なくとも80%をカバーしていない場合は、問題が起こりやすいと思います、ご注意ください!(システムがrspecを使ってない場合はほぼ無理です、rspec使ってください。)

更新の前に

今のプロジェクトはバーション5.0を使っているの確認。そして、rpsec が80%以上システムテストしている状態。

今の使っているgemが更新の後でまだ使えるかどうかのチェック、
next_railsgem を使って、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/ の中
bundlesecrets.yml が消されてしまうかも、これは自分のプロジェクト元々に戻そう!
など、、、
簡単?
おめでとう、もう5.1.7に更新できました!!!
けど、、エラーが、、

たくさんエラーが出ました!?!

5.1からたくさん使えなくなること、変わったこともあるので、rspec 使ったら多分たくさんエラーと注意も出たはずです。
before_actionafter_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個ずっつテストして直しましょう!
頑張ってね!
なんか質問合ったら、是非聞いてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0