Rails 6.0.0.beta1を試した

開発に携わっているアプリケーションを Rails 5.2.2 から 6.0.0.beta1 に移行する作業を加えたので、対応した諸問題について書きます。

bullet gem

ORM で非効率な SQL が組み立てられていることを検知してくれる bullet という gem ですが、まだ最新版でも Rails 5.2.2 で動かすと例外が出て動かない状態でした。これに対して、 https://github.com/flyerhzm/bullet/pull/439 のように Rails 6 に対応してみたという Pull Request が出ています。

newrelic_rpm gem

NewRelic の Ruby 用 Agent ですが、使っていたバージョン 5.x だと Rails 6 で動かしたときに例外が発生する状態でした。6.0.0 で Rails 6 に対応したようなので、これは最新版にアップグレードするだけで対応できます。

paranoia gem

ActiveRecord で論理削除を行うための paranoia gem ですが、現時点で最新版のものだと dependency が Rails 4.0 以上 5.3 未満に制限されている状態でした。Rails 6 に対応しようという Pull Request https://github.com/rubysherpas/paranoia/pull/456 が出ています。

should-matchers gem

Rails に特化したテスト用の matcher などを提供してくれる shoulda-matchers gem を利用しているプロジェクトだったんですが、Rails 6 で動かすとこれが例外を発生させるようでした。https://github.com/thoughtbot/shoulda-matchers/pull/1117 に対応する Pull Request が出ています。

annotate gem

正規化された DB スキーマやルーティング情報をコメントとして自動で残してくれる annotate gem ですが、リリースされている最新版では Rails 6 未満でしか利用できなかったものの、https://github.com/ctran/annotate_models/pull/595 が merge されて Rails 7 未満で使えるようになっていたので、新しいバージョンがリリースされれば上手くいくようになると思います。

redirect_to

https://github.com/rails/rails/pull/34412 が merge され、redirect_to に外部ホストのものらしき URL を指定すると例外が発生するようになり、これが Rails 6.0.0.beta1 に入っているんですが、対応として少しまずかったということで https://github.com/rails/rails/pull/35018 で revert されています。

activerecord

has-many-through の関係性を持つレコードを validation するとき、5.2.2 と 6.0.0.beta1 で validation 順序か保存順序が変わったのか、上手くいかなくなるケースが出てきました。とりあえず再現するためのコードを https://gist.github.com/r7kamura/73633bd30ffc1647f61c97f3a4de8d67 に用意したんですが、直し方は分からず調査していたところ、kamipo さんが直してくれました。

https://github.com/rails/rails/pull/35116