最近のRails 6対応

以前 Rails 6.0.0.beta1 を試したときの諸問題について書きましたが、今回はその続きです。現在では Rails 6.0.0.beta3 がリリースされているので、このバージョンで試しています。

https://www.patreon.com/posts/rails-6-0-0-24356189

bullet

以前見たときは Rails 6 対応用の Pull Request が出ている状態でしたが、これが merge されていました。master ブランチでは既に Rails 6 で動くようになっています。

https://github.com/flyerhzm/bullet

Module#parent

Rails 6 では以下のようにメソッド名が変わり、Rails 6.0 からは古い方のメソッドを利用していると警告が出るようになります。

  • Module#parent -> Module#module_parent
  • Module#parents -> Module#module_parents
  • Module#parent_name -> Module#module_parent_name

active_model_serializers や compass-rails などを利用している関係で影響を受けました。

例: https://github.com/rails-api/active_model_serializers/pull/2319

テンプレートハンドラー

Rails 6 から actionview 用のテンプレートハンドラーが満たすべき仕様が変わる関係で、これを満たしていないものを actionview に登録しようとすると警告が出るようになります。

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

携わっているプロジェクトでは以下の gem が関係していましたが、どれも最新版あるいは GitHub の master で対応されています。

  • coffee-rails
  • jbuilder
  • haml
  • hamlit

hamlit は当時はまだ対応されていなかったので Pull Request を出したりしていました。

https://github.com/k0kubun/hamlit/pull/138

ActionView

モデルなど、HTTP リクエストのコンテキストではない箇所から ActionView 用のテンプレートを描画するために ActionView::Base.new(...).render(...) というコードがこれまでは動いていたのですが、Rails 6 からは動かなくなったので ApplicationController.render(...) というコードに書き換えました。

t.timestamp

過去の migration ファイルに t.timstamps と間違えて t.timestamp というコードが紛れ込んでおり、Rails 5 以前まではこのコードは無視されるのですが、Rails 6 からは t.timestamp はカラム名の無い不正な定義として ArgumentError が発生するようになるので、このコードを消す対応が必要になりました。

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

余談ですが、これは以前 unasuke.rb で作業したときに隣で chiastolite さんが対応した問題でした。

https://www.patreon.com/posts/activerecorddeto-24606070