Rubyをアップグレードする
Rails 5にはRuby 2.2.2以上が必要。
これより古いものを使っている場合は、まずRubyのバージョンを上げる必要がある。
具体的なバージョンアップ方法は環境によって異なるので割愛。
これより古いものを使っている場合は、まずRubyのバージョンを上げる必要がある。
具体的なバージョンアップ方法は環境によって異なるので割愛。
Rubyのバージョンは、Gemfileで
ruby
ディレクティブを使ってバージョンを指定するのがおすすめ。RailsのGemをアップグレードする
Rails 5へのアップグレード前に、Rails 4系の最新のバージョンで動作確認して、DeprecationのWarningやその他の問題が無い状態にすべき。また、十分なテストカバレッジも必要。
準備が完了したら、Gemfileのバージョンを5.0.0に書き換える。
次に、
bundle update
コマンドを実行する。ここでは、Railsのgemだけをアップデートする。Rails update
以下のコマンドを実行して、Railsの設定ファイル等を更新する。
rails rails:update
と書いてある(古い)ドキュメントもある。これでも動くが、DeprecationのWarningが出るので注意。rails app:update
を実行すると、conflictが発生した際に確認メッセージが表示される。
大半は上書きしても問題無いものだけど、
config/routes.rb
に定義したルーティングを全て消去したりするので、確認は慎重に。ApplicationRecordをActiveRecordのモデルのベースクラスにする
Rails 5のアプリを新規作成すると、ActiveRecordの各モデルは
ApplicationRecord
を継承する。この継承関係は必須ではないが、Rails 5ではこの方式が推奨される。
Rails 4からアップグレードしたアプリケーションでは、
ApplicationRecord
を自分で作る必要がある。
はじめに、
app/models/application_record.rb
を以下の内容で作成する。
次に、各モデルクラスの継承関係を変更する。たとえば、
は、以下のように変更する。
ApplicationJobをActiveJobのクラスのベースクラスにする
ActiveRecordと同様、ActiveJobも継承関係の変更が推奨される。
初めに、
app/jobs/application_job.rb
を以下の内容で作成する。
次に、ActiveJobの各クラスのスーパークラスを、
ActiveJob::Base
からApplicationJob
に変更する。コールバックチェーンの変更点
Rails 5ではコールバックチェーンの挙動が変わっている。
Rails 5では、コールバックチェーンを止めるには、明示的に
throw(:abort)
を呼ぶことが推奨される。一方、以前のバージョンのRailsでは、コールバックメソッド内でfalse
を返せばコールバックチェーンを止めることができた。
Rails 4から5にアップグレードすると、コールバックチェーンは従来と同じように動作するが、DeprecationのWarningが出力されるようになる。ソースコードを修正し、アプリケーションが新しいコールバックチェーンの挙動で動作できるようになったら、Initializerの中で以下のメソッド呼び出しを行うことで、新しい挙動を有効化して、Warningを止めることができる。
テストの実行
この段階で、定型的なアップグレード手順は終了。あとは、テストを実行して、発生したErrorやWarningを1つずつ潰していく。
0 件のコメント:
コメントを投稿