最近の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 さんが対応した問題でした。