LoginSignup
33
12

More than 1 year has passed since last update.

rails6.1で加わった新しいアプリケーション設定であるnew_framework_defaults_6_1.rbの各項目をさらっと解説

Last updated at Posted at 2020-12-14

new_framework_defaults_6_1.rbとは

railsバージョンアップの工程で、rails app:updateコマンドを実行すると、config/initializers/new_framework_defaults_6_1.rbと言うファイルが作成されます。
このファイルにはrails6.0, 6.1間で変更される設定値が書かれています。

この記事の内容

実際にバージョンアップをする際は、このファイルの設定値を確認しながらバージョンアップを行うので内容を把握する必要があるため数行で各項目を解説していきます。
どのように使うかの詳細はこの記事では書きません。
config/initializers/new_framework_defaults_6_1.rwo

解説

Rails.application.config.active_record.has_many_inversing = true

has_manyでinverse_of:を追加した場合に関連付けのモデルを作成した時に、関連付けのモデルのコールバックが実行されてしまうバグフィックスがあったが、破壊的な変更になるためオプション設定できる様になった。

デフォルトではtrueで、これまで通りコールバックが実行される。

See: https://github.com/rails/rails/pull/37413
https://github.com/rails/rails/pull/37429

Rails.application.config.active_storage.track_variants = true

ActiveStorageでvariantsの存在チェックでのオーバーヘッドが大きいためデフォルトで処理を廃止し、存在チェックを行いたい場合はオプションで設定できるようにした。

See: https://github.com/rails/rails/pull/37901

Rails.application.config.active_job.retry_jitter = 0.15

jitterがデフォルトで指定されるようになった。
デフォルト値を変更にしたい場合は値を書き換える。

See: https://github.com/rails/rails/pull/37923

Rails.application.config.active_job.skip_after_callbacks_if_terminated = true

ActibJobで、job実行時にcallback chainがhaltした場合、after_enqueue, after_perform を実行しないよう修正された。
これは、破壊的な変更になるため、デフォルトでは互換性を保つためにfalseになっている。(= haltしてもコールバックが実行される)
新しい挙動を有効化したい場合はtrueを指定する。

Rails.application.config.action_dispatch.cookies_same_site_protection = :lax

Cookieを書き込み時に、SameSite属性の値が指定される様になった。
デフォルトはLax。
Strictにしたい場合、:strictを指定する。SameSiteを無効化したい場合は:noneを指定する。
この設定を有効にすると以前のバージョンとの互換性は失われます。ロールバックが困難になるため、:noneに設定しておきバージョンアップが安定したあと再度この指定を行うことをお勧めします。

Rails.application.config.action_controller.urlsafe_csrf_tokens = true

CSRFのエンコード方式がbase64からurlsafeなbase64に変更されました。

この設定を有効にすると以前のバージョンとの互換性は失われます。ロールバックが困難になるため、falseに設定しておきバージョンアップが安定したあと設定を削除しデフォルトの挙動trueへ移行することをお勧めします。

ActiveSupport.utc_to_local_returns_utc_offset_times = true

gem 'tzinfo'をv2にバージョンアップしたことでActiveSupport::TimeZone.utc_to_localの返り値にUTC offsetが含まれようになった。
デフォルトはfalseで返り値にUTC offsetが含まない。

Rails.application.config.action_dispatch.ssl_default_redirect_status = 308

GET, HEADリクエストをHTTPからHTTPSにリダイレクトするときに使用されるHTTPステータスコードをRFC7538に準拠した308にデフォルトを定義します。

See: https://tools.ietf.org/html/rfc7538

Rails.application.config.active_record.legacy_connection_handling = false

connected_toメソッドをActiveRecord::Baseからだけでなく、抽象クラスからも呼び出せるようになりました。
抽象クラス内で複数のデータベース接続をするためにコレクションの切り替えを行います。

Rails.application.config.action_view.form_with_generates_remote_forms = false

form_withヘルパーで生成されるformタグのdata-remote属性のデフォルトがtrueからfalseになった。下位バージョンと互換性を保つためにはtrueを設定する。

Rails.application.config.active_storage.queues.analysis = nil

config.active_storage.queueは非推奨になり、config.active_storage.queues.analysis, config.active_storage.queues.purgeに分割された。

ActiveStorageでオブジェクトがDBに登録されたときにActiveJob経由で、ファイルからメタデータを抽出しblobレコードのmetadataカラムに保存される。(このカラムはmini_magickを使って画像からheightやwidthを取り出すときによく使われる。)
このjobのキューがdefaultキューにしか投入できなかったが、このオプションでキューを指定できる様になった。

Rails.application.config.active_storage.queues.purge = nil

config.active_storage.queueは非推奨になり、config.active_storage.queues.analysis, config.active_storage.queues.purgeに分割された。

ActiveStorageのオブジェクトが指すファイルパスの更新時に古いファイルを削除するjobのキューがdefaultキューにしか投入できなかったが、このオプションでキューを指定できる様になった。

Rails.application.config.action_mailbox.queues.incineration = nil

処理が成功したInboundEmailのincinerate(削除)ActiveJobの実行キューが選択可能になりました。

Rails.application.config.action_mailbox.queues.routing = nil

InboundEmail受信時のルーティング処理をするActiveJobの実行キューが選択可能になりました。
非同期になっているのは他の処理を行なっている間にハングする時間をかけずに新しい受信メールを受け入れるため。

Rails.application.config.action_mailer.deliver_later_queue_name = nil

ActionMailerでのメールの非同期送信をするActiveJobの実行キューが選択可能になりました。

ファイル全文

# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.1 upgrade.
#
# Once upgraded flip defaults one by one to migrate to the new default.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.

# Support for inversing belongs_to -> has_many Active Record associations.
# Rails.application.config.active_record.has_many_inversing = true

# Track Active Storage variants in the database.
# Rails.application.config.active_storage.track_variants = true

# Apply random variation to the delay when retrying failed jobs.
# Rails.application.config.active_job.retry_jitter = 0.15

# Stop executing `after_enqueue`/`after_perform` callbacks if
# `before_enqueue`/`before_perform` respectively halts with `throw :abort`.
# Rails.application.config.active_job.skip_after_callbacks_if_terminated = true

# Specify cookies SameSite protection level: either :none, :lax, or :strict.
#
# This change is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.1.
# Rails.application.config.action_dispatch.cookies_same_site_protection = :lax

# Generate CSRF tokens that are encoded in URL-safe Base64.
#
# This change is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 6.1.
# Rails.application.config.action_controller.urlsafe_csrf_tokens = true

# Specify whether `ActiveSupport::TimeZone.utc_to_local` returns a time with an
# UTC offset or a UTC time.
# ActiveSupport.utc_to_local_returns_utc_offset_times = true

# Change the default HTTP status code to `308` when redirecting non-GET/HEAD
# requests to HTTPS in `ActionDispatch::SSL` middleware.
# Rails.application.config.action_dispatch.ssl_default_redirect_status = 308

# Use new connection handling API. For most applications this won't have any
# effect. For applications using multiple databases, this new API provides
# support for granular connection swapping.
# Rails.application.config.active_record.legacy_connection_handling = false

# Make `form_with` generate non-remote forms by default.
# Rails.application.config.action_view.form_with_generates_remote_forms = false

# Set the default queue name for the analysis job to the queue adapter default.
# Rails.application.config.active_storage.queues.analysis = nil

# Set the default queue name for the purge job to the queue adapter default.
# Rails.application.config.active_storage.queues.purge = nil

# Set the default queue name for the incineration job to the queue adapter default.
# Rails.application.config.action_mailbox.queues.incineration = nil

# Set the default queue name for the routing job to the queue adapter default.
# Rails.application.config.action_mailbox.queues.routing = nil

# Set the default queue name for the mail deliver job to the queue adapter default.
# Rails.application.config.action_mailer.deliver_later_queue_name = nil

参考

33
12
3

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
33
12