edge
詳細はrubyonrails.orgで: もっとRuby on Rails

Railsアプリケーションの設定

このガイドでは、Railsアプリケーションで利用可能な設定と初期化機能について説明します。

このガイドを読み終えると、以下のことがわかるようになります。

1 初期化コードの配置場所

Railsでは、初期化コードを配置するための4つの標準的な場所が提供されています。

  • config/application.rb
  • 環境固有の設定ファイル
  • イニシャライザ
  • イニシャライザの後

2 Railsの前にコードを実行する

アプリケーションがRails自体がロードされる前にコードを実行する必要がある場合は、config/application.rbrequire "rails/all"の前に配置してください。

3 Railsコンポーネントの設定

一般的に、Railsの設定作業は、Railsのコンポーネントの設定とRails自体の設定を行うことを意味します。config/application.rbファイルや環境固有の設定ファイル(例:config/environments/production.rb)では、すべてのコンポーネントに渡すためのさまざまな設定を指定できます。

たとえば、次の設定をconfig/application.rbファイルに追加できます。

config.time_zone = 'Central Time (US & Canada)'

これはRails自体の設定です。個々のRailsコンポーネントに設定を渡す場合は、config/application.rbの同じconfigオブジェクトを使用して行うことができます。

config.active_record.schema_format = :ruby

Railsはその特定の設定を使用してActive Recordを設定します。

警告: 関連するクラスに直接呼び出す代わりに、公開されている設定メソッドを使用してください。たとえば、ActionMailer::Base.optionsの代わりにRails.application.config.action_mailer.optionsを使用します。

注意: クラスに直接設定を適用する必要がある場合は、初期化子で遅延ロードフックを使用して、初期化が完了する前にクラスを自動ロードしないようにします。これは、アプリケーションが再読み込みされるときに安全に繰り返し実行できないためです。

3.1 バージョン付きのデフォルト値

config.load_defaultsは、対象バージョンとそれ以前のすべてのバージョンに対するデフォルトの設定値を読み込みます。たとえば、config.load_defaults 6.1は、バージョン6.1までのすべてのバージョンのデフォルトを読み込みます。

以下は、各対象バージョンに関連付けられたデフォルト値です。競合する値の場合、新しいバージョンが古いバージョンより優先されます。

3.1.1 対象バージョン7.1のデフォルト値

3.1.2 ターゲットバージョン6.1のデフォルト値

3.1.3 ターゲットバージョン6.0のデフォルト値

3.1.4 ターゲットバージョン5.2のデフォルト値

3.1.5 ターゲットバージョン5.1のデフォルト値

3.1.6 ターゲットバージョン5.0のデフォルト値

3.2 Rails一般の設定

以下の設定メソッドは、Rails::EngineRails::ApplicationのサブクラスなどのRails::Railtieオブジェクトで呼び出す必要があります。

3.2.1 config.add_autoload_paths_to_load_path

autoloadパスを$LOAD_PATHに追加するかどうかを指定します。:zeitwerkモードでは、config/application.rbで早期にfalseに設定することが推奨されています。Zeitwerkは内部的に絶対パスを使用し、:zeitwerkモードで実行されるアプリケーションではrequire_dependencyが必要ないため、モデル、コントローラ、ジョブなどは$LOAD_PATHに含める必要はありません。この設定をfalseにすることで、Rubyは相対パスでのrequire呼び出しの解決時にこれらのディレクトリをチェックする必要がなくなり、Bootsnapの作業とRAMを節約することができます。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) true
7.1 false

libディレクトリはこのフラグの影響を受けません。常に$LOAD_PATHに追加されます。

3.2.2 config.after_initialize

アプリケーションの初期化が完了した後に実行されるブロックを受け取ります。これには、フレームワーク自体、エンジン、およびconfig/initializers内のすべての初期化子の初期化が含まれます。このブロックはrakeタスクでも実行されます。他の初期化子によって設定された値を構成するために便利です。 ruby config.after_initialize do ActionView::Base.sanitized_allowed_tags.delete 'div' end

3.2.3 config.after_routes_loaded

アプリケーションのルートが読み込まれた後に実行されるブロックを受け取ります。このブロックは、ルートが再読み込みされるたびに実行されます。

config.after_routes_loaded do
  # Rails.application.routes を使用して何かを行うコード
end

3.2.4 config.allow_concurrency

リクエストを並行して処理するかどうかを制御します。アプリケーションのコードがスレッドセーフでない場合にのみ false に設定する必要があります。デフォルトは true です。

3.2.5 config.asset_host

アセットのホストを設定します。アセットのホスティングにCDNを使用する場合や、異なるドメインエイリアスを使用してブラウザの並行制約を回避する場合に便利です。config.action_controller.asset_host の短縮バージョンです。

3.2.6 config.assume_ssl

すべてのリクエストがSSL経由で到着しているとアプリケーションに信じさせます。これは、SSLを終端するロードバランサを経由してプロキシする場合に便利です。転送されたリクエストは、アプリケーションに対してHTTPではなくHTTPSであるかのように表示されます。これにより、リダイレクトやクッキーセキュリティはHTTPSではなくHTTPを対象とします。このミドルウェアは、サーバーがプロキシが既にSSLを終了し、リクエストが実際にHTTPSであると仮定するものです。

3.2.7 config.autoflush_log

ログファイルの出力をバッファリングせずにすぐに行うようにします。デフォルトは true です。

3.2.8 config.autoload_once_paths

リクエストごとにクリアされない定数をRailsが自動読み込みするパスの配列を受け入れます。これは、development 環境ではデフォルトで有効になっているリロードが有効な場合に関連します。それ以外の場合、すべての自動読み込みは1回だけ行われます。この配列のすべての要素は autoload_paths にも含まれている必要があります。デフォルトは空の配列です。

3.2.9 config.autoload_paths

Railsが定数を自動読み込みするパスの配列を受け入れます。デフォルトは空の配列です。Rails 6以降、これを調整することは推奨されていません。Autoloading and Reloading Constantsを参照してください。

3.2.10 config.autoload_lib(ignore:)

このメソッドは libconfig.autoload_paths および config.eager_load_paths に追加します。

通常、lib ディレクトリには自動読み込みやイーガーロードを行うべきではないサブディレクトリがあります。必要な ignore キーワード引数には、lib に対する相対的な名前を渡してください。例えば、

config.autoload_lib(ignore: %w(assets tasks generators))

詳細については、autoloading guideを参照してください。

3.2.11 config.autoload_lib_once(ignore:)

config.autoload_lib_once メソッドは config.autoload_lib と似ていますが、代わりに libconfig.autoload_once_paths に追加します。

config.autoload_lib_once を呼び出すことで、lib 内のクラスやモジュールが自動読み込みされ、アプリケーションのイニシャライザからもリロードされなくなります。

3.2.12 config.beginning_of_week

アプリケーションのデフォルトの週の開始日を設定します。有効な曜日のシンボル(例: :monday)を受け入れます。

3.2.13 config.cache_classes

!config.enable_reloading と同等の古い設定です。後方互換性のためにサポートされています。

3.2.14 config.cache_store

Railsのキャッシュに使用するキャッシュストアを設定します。オプションには、:memory_store:file_store:mem_cache_store:null_store:redis_cache_storeのいずれかのシンボル、またはキャッシュAPIを実装したオブジェクトがあります。デフォルトは:file_storeです。パーストアの設定オプションについては、キャッシュストアを参照してください。

3.2.15 config.colorize_logging

ログ情報を出力する際にANSIカラーコードを使用するかどうかを指定します。デフォルトはtrueです。

3.2.16 config.consider_all_requests_local

フラグです。trueの場合、エラーが発生すると詳細なデバッグ情報がHTTPレスポンスにダンプされ、Rails::Infoコントローラーは/rails/info/propertiesでアプリケーションのランタイムコンテキストを表示します。開発環境とテスト環境ではデフォルトでtrueになり、本番環境ではfalseになります。より細かい制御のために、これをfalseに設定し、コントローラーでshow_detailed_exceptions?を実装して、どのリクエストがエラー時にデバッグ情報を提供するかを指定します。

3.2.17 config.console

bin/rails consoleを実行する際に使用されるコンソールクラスを設定することができます。以下のようにconsoleブロック内で実行するのがベストです。

console do
  # このブロックはコンソールを実行する場合にのみ呼び出されるため、ここで安全にpryをrequireできます
  require "pry"
  config.console = Pry
end

3.2.18 config.content_security_policy_nonce_directives

セキュリティガイドのNonceの追加を参照してください。

3.2.19 config.content_security_policy_nonce_generator

セキュリティガイドのNonceの追加を参照してください。

3.2.20 config.content_security_policy_report_only

セキュリティガイドの違反の報告を参照してください。

3.2.21 config.credentials.content_path

暗号化された認証情報ファイルのパスです。

存在する場合はデフォルトでconfig/credentials/#{Rails.env}.yml.enc、存在しない場合はconfig/credentials.yml.encです。

注意: bin/rails credentialsコマンドがこの値を認識するためには、config/application.rbまたはconfig/environments/#{Rails.env}.rbで設定する必要があります。

3.2.22 config.credentials.key_path

暗号化された認証情報キーファイルのパスです。

存在する場合はデフォルトでconfig/credentials/#{Rails.env}.key、存在しない場合はconfig/master.keyです。

注意: bin/rails credentialsコマンドがこの値を認識するためには、config/application.rbまたはconfig/environments/#{Rails.env}.rbで設定する必要があります。

3.2.23 config.debug_exception_response_format

開発環境でエラーが発生した場合のレスポンスで使用されるフォーマットを設定します。API専用アプリの場合はデフォルトで:api、通常のアプリの場合は:defaultです。

3.2.24 config.disable_sandbox

サンドボックスモードでコンソールを起動できるかどうかを制御します。これにより、データベースサーバーがメモリ不足になる可能性のある長時間実行されるサンドボックスコンソールセッションを回避するのに役立ちます。デフォルトはfalseです。

3.2.25 config.eager_load

trueの場合、登録されたすべてのconfig.eager_load_namespacesを一括読み込みします。これにはアプリケーション、エンジン、Railsフレームワーク、およびその他の登録された名前空間が含まれます。

3.2.26 config.eager_load_namespaces

config.eager_loadtrueに設定されている場合に一括読み込みされる名前空間を登録します。リスト内のすべての名前空間は、eager_load!メソッドに応答する必要があります。

3.2.27 config.eager_load_paths

config.eager_loadtrueの場合、Railsは起動時に読み込むパスの配列を受け入れます。デフォルトでは、アプリケーションのappディレクトリ内のすべてのフォルダが対象です。

3.2.28 config.enable_reloading

config.enable_reloadingtrueの場合、アプリケーションのクラスとモジュールはリクエスト間に再読み込みされます。デフォルトでは、development環境ではtrueproduction環境ではfalseです。

述語config.reloading_enabled?も定義されています。

3.2.29 config.encoding

アプリケーション全体のエンコーディングを設定します。デフォルトではUTF-8です。

3.2.30 config.exceptions_app

例外が発生した場合にShowExceptionミドルウェアによって呼び出される例外アプリケーションを設定します。 デフォルトではActionDispatch::PublicExceptions.new(Rails.public_path)です。

例外アプリケーションは、クライアントが無効なAcceptまたはContent-Typeヘッダを送信した場合に発生するActionDispatch::Http::MimeNegotiation::InvalidTypeエラーを処理する必要があります。 デフォルトのActionDispatch::PublicExceptionsアプリケーションは、これを自動的に処理し、Content-Typetext/htmlに設定し、406 Not Acceptableステータスを返します。 このエラーを処理しないと、500 Internal Server Errorが発生します。

例外アプリケーションとしてRails.application.routesRouteSetを使用する場合も、この特殊な処理が必要です。 次のようなものになるかもしれません。

# config/application.rb
config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)

# lib/custom_exceptions_app_wrapper.rb
class CustomExceptionsAppWrapper
  def initialize(exceptions_app:)
    @exceptions_app = exceptions_app
  end

  def call(env)
    request = ActionDispatch::Request.new(env)

    fallback_to_html_format_if_invalid_mime_type(request)

    @exceptions_app.call(env)
  end

  private
    def fallback_to_html_format_if_invalid_mime_type(request)
      request.formats
    rescue ActionDispatch::Http::MimeNegotiation::InvalidType
      request.set_header "CONTENT_TYPE", "text/html"
    end
end

3.2.31 config.file_watcher

config.reload_classes_only_on_changetrueの場合、ファイルシステムでファイルの更新を検出するために使用されるクラスです。RailsにはデフォルトでActiveSupport::FileUpdateCheckerが付属しており、ActiveSupport::EventedFileUpdateChecker(これはlisten gemに依存します)も利用できます。カスタムクラスはActiveSupport::FileUpdateCheckerのAPIに準拠する必要があります。

3.2.32 config.filter_parameters

ログに表示したくないパラメータをフィルタリングするために使用されます。パスワードやクレジットカード番号などの機密情報を非表示にするために使用されます。また、Active Recordオブジェクトの#inspectを呼び出す際に、データベースの列の機密情報もフィルタリングされます。デフォルトでは、Railsはconfig/initializers/filter_parameter_logging.rbに以下のフィルタを追加してパスワードをフィルタリングします。

Rails.application.config.filter_parameters += [
  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]

パラメータフィルタは、正規表現の部分一致によって動作します。

3.2.33 config.filter_redirect

アプリケーションのログからリダイレクトURLをフィルタリングするために使用されます。

Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]

リダイレクトフィルタは、URLが文字列を含むか正規表現に一致するかをテストして動作します。

3.2.34 config.force_ssl

すべてのリクエストをHTTPSで提供するように強制し、URLを生成する際にデフォルトのプロトコルとして「https://」を設定します。HTTPSの強制は、`ActionDispatch::SSL`ミドルウェアによって処理され、`config.ssl_options`を介して設定できます。

3.2.35 config.helpers_paths

ビューヘルパーを読み込むための追加のパスの配列を定義します。

3.2.36 config.host_authorization

HostAuthorizationミドルウェアを設定するためのオプションのハッシュを受け入れます。

3.2.37 config.hosts

Hostヘッダーを検証するために使用される、文字列、正規表現、またはIPAddrの配列です。HostAuthorizationミドルウェアによって、DNSリバインディング攻撃を防止するために使用されます。

3.2.38 config.javascript_path

appディレクトリに対して、アプリケーションのJavaScriptが存在するパスを設定します。デフォルトはjavascriptで、webpackerで使用されます。設定されたjavascript_pathautoload_pathsから除外されます。

3.2.39 config.log_file_size

Railsログファイルの最大サイズをバイト単位で定義します。デフォルトは開発環境とテスト環境では104_857_600(100 MiB)、その他のすべての環境では無制限です。

3.2.40 config.log_formatter

Railsロガーのフォーマッタを定義します。このオプションは、すべての環境でデフォルトでActiveSupport::Logger::SimpleFormatterのインスタンスになります。config.loggerに値を設定している場合は、ラッパーされる前にフォーマッタの値を手動でロガーに渡す必要があります。Railsはその処理を自動的に行いません。

3.2.41 config.log_level

Railsロガーの詳細度を定義します。このオプションは、本番環境を除くすべての環境でデフォルトで:debugになります。使用可能なログレベルは、:debug:info:warn:error:fatal:unknownです。

3.2.42 config.log_tags

requestオブジェクトが応答するメソッドのリスト、requestオブジェクトを受け入れるProc、またはto_sに応答するものを受け入れます。これにより、サブドメインやリクエストIDなどのデバッグ情報をログ行にタグ付けすることが容易になります。これは、マルチユーザープロダクションアプリケーションのデバッグに非常に役立ちます。

3.2.43 config.logger

Rails.loggerActiveRecord::Base.loggerなどの関連するRailsログに使用されるロガーです。デフォルトは、log/ディレクトリにログを出力するActiveSupport::LoggerのインスタンスをラップするActiveSupport::TaggedLoggingのインスタンスです。カスタムロガーを提供することもできますが、完全な互換性を得るためには以下のガイドラインに従う必要があります。

  • フォーマッタをサポートするには、config.log_formatterの値からロガーにフォーマッタを手動で割り当てる必要があります。
  • タグ付きログをサポートするには、ログインスタンスをActiveSupport::TaggedLoggingでラップする必要があります。
  • サイレンスをサポートするには、ロガーにActiveSupport::LoggerSilenceモジュールを含める必要があります。ActiveSupport::Loggerクラスはこれらのモジュールをすでに含んでいます。
class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

mylogger           = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger      = ActiveSupport::TaggedLogging.new(mylogger)

3.2.44 config.middleware

アプリケーションのミドルウェアを設定することができます。詳細は、以下のConfiguring Middlewareセクションで説明されています。

3.2.45 config.precompile_filter_parameters

trueの場合、config.filter_parametersActiveSupport::ParameterFilter.precompile_filtersを使用して事前コンパイルします。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
7.1 true

3.2.46 config.public_file_server.enabled

Railsを設定して、パブリックディレクトリから静的ファイルを提供するかどうかを設定します。このオプションのデフォルト値はtrueですが、本番環境ではfalseに設定されます。なぜなら、アプリケーションを実行するために使用されるサーバーソフトウェア(例:NGINXやApache)が静的ファイルを提供するべきだからです。もしWEBrickを使用して本番環境でアプリケーションを実行またはテストしている場合(本番環境でWEBrickを使用することは推奨されません)、このオプションをtrueに設定してください。そうしないと、ページキャッシュを使用したり、パブリックディレクトリ内に存在するファイルのリクエストを行うことができません。

3.2.47 config.railties_order

Railties/Enginesの読み込み順序を手動で指定することができます。デフォルト値は[:all]です。

config.railties_order = [Blog::Engine, :main_app, :all]

3.2.48 config.rake_eager_load

trueの場合、Rakeタスクを実行する際にアプリケーションを即時に読み込みます。デフォルト値はfalseです。

3.2.49 config.read_encrypted_secrets

非推奨: 暗号化されたシークレットの代わりにcredentialsを使用するべきです。

trueの場合、config/secrets.yml.encから暗号化されたシークレットを読み取ろうとします。

3.2.50 config.relative_url_root

Railsにサブディレクトリにデプロイしていることを伝えるために使用できます(サブディレクトリにデプロイする方法を参照)。デフォルト値はENV['RAILS_RELATIVE_URL_ROOT']です。

3.2.51 config.reload_classes_only_on_change

トラッキングされたファイルが変更された場合にのみクラスのリロードを有効または無効にします。デフォルトではautoloadパス上のすべてをトラッキングし、trueに設定されています。config.enable_reloadingfalseの場合、このオプションは無視されます。

3.2.52 config.require_master_key

ENV["RAILS_MASTER_KEY"]またはconfig/master.keyファイルを介してマスターキーが利用可能でない場合、アプリケーションの起動を防ぎます。

3.2.53 config.secret_key_base

アプリケーションのキージェネレーターの入力シークレットの指定のフォールバックです。これを設定せずに、代わりにconfig/credentials.yml.encsecret_key_baseを指定することを推奨します。詳細な情報や代替の設定方法については、secret_key_baseのAPIドキュメントを参照してください。

3.2.54 config.server_timing

trueの場合、ServerTimingミドルウェアをミドルウェアスタックに追加します。

3.2.55 config.session_options

config.session_storeに渡される追加のオプションです。自分で変更する代わりに、config.session_storeを使用して設定するべきです。

config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}

3.2.56 config.session_store

セッションを保存するために使用するクラスを指定します。可能な値は:cache_store:cookie_store:mem_cache_store、カスタムストア、または:disabledです。:disabledはセッションを処理しないようにRailsに指示します。

この設定は、セッターではなく通常のメソッド呼び出しで行われます。これにより、追加のオプションを渡すことができます。

config.session_store :cookie_store, key: "_your_app_session"

カスタムストアがシンボルで指定されている場合、ActionDispatch::Sessionの名前空間に解決されます。

# ActionDispatch::Session::MyCustomStoreをセッションストアとして使用する
config.session_store :my_custom_store

デフォルトのストアは、アプリケーション名をセッションキーとするクッキーストアです。

3.2.57 config.ssl_options

ActionDispatch::SSL ミドルウェアの設定オプションです。

デフォルト値は config.load_defaults のターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) {}
5.0 { hsts: { subdomains: true } }

3.2.58 config.time_zone

アプリケーションのデフォルトのタイムゾーンを設定し、Active Record のタイムゾーンの認識を有効にします。

3.2.59 config.x

アプリケーションの設定オブジェクトにネストされたカスタム設定を簡単に追加するために使用されます。

  config.x.payment_processing.schedule = :daily
  Rails.configuration.x.payment_processing.schedule # => :daily

詳細は カスタム設定 を参照してください。

3.3 アセットの設定

3.3.1 config.assets.css_compressor

使用する CSS コンプレッサを定義します。デフォルトでは sass-rails によって設定されます。現時点で唯一の代替値は :yui で、yui-compressor ジェムを使用します。

3.3.2 config.assets.js_compressor

使用する JavaScript コンプレッサを定義します。可能な値は :terser:closure:uglifier:yui で、それぞれ terserclosure-compileruglifieryui-compressor ジェムの使用を必要とします。

3.3.3 config.assets.gzip

コンパイルされたアセットの gzip バージョンの作成を有効にするフラグです。デフォルトでは true に設定されています。

3.3.4 config.assets.paths

アセットの検索に使用されるパスが含まれています。この設定オプションにパスを追加すると、それらのパスがアセットの検索に使用されます。

3.3.5 config.assets.precompile

bin/rails assets:precompile を実行する際に、application.cssapplication.js 以外の追加のアセットを指定することができます。

3.3.6 config.assets.unknown_asset_fallback

asset pipeline でアセットがパイプラインにない場合の動作を変更することができます。sprockets-rails 3.2.0 以降を使用している場合にのみ有効です。

デフォルト値は config.load_defaults のターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) true
5.1 false

3.3.7 config.assets.prefix

アセットが提供されるプレフィックスを定義します。デフォルトは /assets です。

3.3.8 config.assets.manifest

アセットプリコンパイラのマニフェストファイルに使用される完全なパスを定義します。デフォルトでは、パブリックフォルダ内の config.assets.prefix ディレクトリに manifest-<random>.json という名前のファイルが使用されます。

3.3.9 config.assets.digest

アセット名に SHA256 フィンガープリントの使用を有効にします。デフォルトでは true に設定されています。

3.3.10 config.assets.debug

アセットの連結と圧縮を無効にします。development.rb ではデフォルトで true に設定されています。

3.3.11 config.assets.version

SHA256 ハッシュ生成に使用されるオプション文字列です。すべてのファイルを再コンパイルするために変更することができます。

3.3.12 config.assets.compile

本番環境でのライブ Sprockets コンパイルを有効にするために使用できるブール値です。

3.3.13 config.assets.logger

config.assets.loggerは、Log4rまたはデフォルトのRuby Loggerクラスに準拠するロガーを受け入れます。config.loggerで設定されたものと同じにデフォルトで設定されています。config.assets.loggerfalseに設定すると、提供されるアセットのログ記録が無効になります。

3.3.14 config.assets.quiet

アセットのリクエストのログ記録を無効にします。development.rbではデフォルトでtrueに設定されています。

3.4 ジェネレータの設定

Railsでは、config.generatorsメソッドを使用して使用するジェネレータを変更することができます。このメソッドはブロックを受け取ります。

config.generators do |g|
  g.orm :active_record
  g.test_framework :test_unit
end

このブロックで使用できるメソッドの完全なセットは次のとおりです。

  • force_pluralは複数形のモデル名を許可します。デフォルトはfalseです。
  • helperはヘルパーを生成するかどうかを定義します。デフォルトはtrueです。
  • integration_toolは統合テストを生成するために使用する統合ツールを定義します。デフォルトは:test_unitです。
  • system_testsはシステムテストを生成するために使用する統合ツールを定義します。デフォルトは:test_unitです。
  • ormは使用するORMを定義します。デフォルトはfalseで、デフォルトではActive Recordが使用されます。
  • resource_controllerbin/rails generate resourceを使用してコントローラを生成するために使用するジェネレータを定義します。デフォルトは:controllerです。
  • resource_routeはリソースのルート定義を生成するかどうかを定義します。デフォルトはtrueです。
  • scaffold_controllerresource_controllerとは異なり、bin/rails generate scaffoldを使用してスキャフォールドされたコントローラを生成するために使用するジェネレータを定義します。デフォルトは:scaffold_controllerです。
  • test_frameworkは使用するテストフレームワークを定義します。デフォルトはfalseで、デフォルトではminitestが使用されます。
  • template_engineはERBやHamlなどの使用するテンプレートエンジンを定義します。デフォルトは:erbです。

3.5 ミドルウェアの設定

すべてのRailsアプリケーションには、開発環境で以下の順序で使用される標準のミドルウェアが付属しています。

3.5.1 ActionDispatch::HostAuthorization

DNSリバインディングやその他のHostヘッダ攻撃に対する保護を行います。 デフォルトでは、以下の設定で開発環境に含まれています。

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"),        # すべてのIPv4アドレス。
  IPAddr.new("::/0"),             # すべてのIPv6アドレス。
  "localhost",                    # ローカルホストの予約済みドメイン。
  ENV["RAILS_DEVELOPMENT_HOSTS"]  # 開発用の追加のカンマ区切りホスト。
]

他の環境では、Rails.application.config.hostsは空であり、Hostヘッダのチェックは行われません。本番環境でヘッダ攻撃に対して保護する場合は、許可するホストを手動で追加する必要があります。

Rails.application.config.hosts << "product.com"

リクエストのホストは、ケース演算子(#===)を使用してhostsエントリと照合されます。これにより、hostsRegexpProcIPAddrなどのタイプのエントリをサポートできます。以下は正規表現を使用した例です。 ```ruby

www.product.combeta1.product.com のようなサブドメインからのリクエストを許可します。

Rails.application.config.hosts << /.*.product.com/ ```

提供された正規表現は、アンカー(\A\z)で囲まれるため、ホスト名全体と一致する必要があります。例えば /product.com/ は、アンカーが付いた場合に www.product.com と一致しなくなります。

すべてのサブドメインを許可する特別なケースもサポートされています。

# `www.product.com` や `beta1.product.com` のようなサブドメインからのリクエストを許可します。
Rails.application.config.hosts << ".product.com"

config.host_authorization.exclude を設定することで、ホスト認証のチェックから特定のリクエストを除外することができます。

# `/healthcheck/` パスのリクエストをホストのチェックから除外します。
Rails.application.config.host_authorization = {
  exclude: ->(request) { request.path.include?('healthcheck') }
}

認可されていないホストにリクエストが来た場合、デフォルトの Rack アプリケーションが実行され、403 Forbidden で応答します。これは config.host_authorization.response_app を設定することでカスタマイズすることができます。

Rails.application.config.host_authorization = {
  response_app: -> env do
    [400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
  end
}

3.5.2 ActionDispatch::ServerTiming

Server-Timing ヘッダーにメトリクスを追加し、ブラウザの開発ツールで表示する機能を提供します。

3.5.3 ActionDispatch::SSL

すべてのリクエストを HTTPS を使用して提供するように強制します。config.force_ssltrue に設定されている場合に有効になります。このオプションには config.ssl_options を設定することで構成できます。

3.5.4 ActionDispatch::Static

静的アセットを提供するために使用されます。config.public_file_server.enabledfalse の場合は無効になります。ディレクトリリクエストに対して index という名前の静的ディレクトリインデックスファイルではなく、main.html のような別のファイルを提供する場合は、config.public_file_server.index_name を設定します。例えば、config.public_file_server.index_name"main" に設定すると、ディレクトリリクエストに対して index.html の代わりに main.html を提供します。

3.5.5 ActionDispatch::Executor

スレッドセーフなコードのリロードを許可します。config.allow_concurrencyfalse の場合は無効になり、Rack::Lock が読み込まれます。Rack::Lock はアプリをミューテックスでラップし、一度に1つのスレッドからのみ呼び出すことができるようにします。

3.5.6 ActiveSupport::Cache::Strategy::LocalCache

基本的なメモリバックキャッシュとして機能します。このキャッシュはスレッドセーフではなく、単一のスレッドの一時的なメモリキャッシュとしてのみ使用することが意図されています。

3.5.7 Rack::Runtime

リクエストの実行にかかった時間(秒単位)を含む X-Runtime ヘッダーを設定します。

3.5.8 Rails::Rack::Logger

リクエストが開始したことをログに通知します。リクエストが完了した後、すべてのログをフラッシュします。

3.5.9 ActionDispatch::ShowExceptions

アプリケーションが返した例外をキャッチし、リクエストがローカルであるか、config.consider_all_requests_localtrue に設定されている場合は、見やすい例外ページを表示します。config.action_dispatch.show_exceptions:none に設定されている場合、例外は常に発生します。

3.5.10 ActionDispatch::RequestId

一意の X-Request-Id ヘッダーをレスポンスで利用できるようにし、ActionDispatch::Request#uuid メソッドを有効にします。config.action_dispatch.request_id_header で設定可能です。

3.5.11 ActionDispatch::RemoteIp

IPスーフィング攻撃をチェックし、リクエストヘッダーから有効な client_ip を取得します。config.action_dispatch.ip_spoofing_checkconfig.action_dispatch.trusted_proxies オプションで設定可能です。

3.5.12 Rack::Sendfile

ファイルから提供されるレスポンスのボディをインターセプトし、サーバー固有のX-Sendfileヘッダーに置き換えます。config.action_dispatch.x_sendfile_headerで設定可能です。

3.5.13 ActionDispatch::Callbacks

リクエストを処理する前に、準備コールバックを実行します。

3.5.14 ActionDispatch::Cookies

リクエストにクッキーを設定します。

3.5.15 ActionDispatch::Session::CookieStore

セッションをクッキーに保存する責任を持ちます。config.session_storeを変更することで、代替のミドルウェアを使用することもできます。

3.5.16 ActionDispatch::Flash

flashキーを設定します。config.session_storeが設定されている場合にのみ利用可能です。

3.5.17 Rack::MethodOverride

params[:_method]が設定されている場合、メソッドを上書きすることを許可します。これは、PATCH、PUT、DELETEのHTTPメソッドタイプをサポートするミドルウェアです。

3.5.18 Rack::Head

HEADリクエストをGETリクエストに変換し、それとして提供します。

3.5.19 カスタムミドルウェアの追加

これらの通常のミドルウェア以外にも、config.middleware.useメソッドを使用して独自のミドルウェアを追加することができます。

config.middleware.use Magical::Unicorns

これにより、Magical::Unicornsミドルウェアがスタックの最後に配置されます。他のミドルウェアの前にミドルウェアを追加したい場合は、insert_beforeを使用することもできます。

config.middleware.insert_before Rack::Head, Magical::Unicorns

また、インデックスを使用してミドルウェアを特定の位置に挿入することもできます。たとえば、スタックの一番上にMagical::Unicornsミドルウェアを挿入したい場合は、次のようにします。

config.middleware.insert_before 0, Magical::Unicorns

insert_afterを使用すると、別のミドルウェアの後にミドルウェアを挿入できます。

config.middleware.insert_after Rack::Head, Magical::Unicorns

ミドルウェアは完全に入れ替えて他のミドルウェアと置き換えることもできます。

config.middleware.swap ActionController::Failsafe, Lifo::Failsafe

ミドルウェアを別の場所に移動することもできます。

config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns

これにより、Magical::UnicornsミドルウェアがActionDispatch::Flashの前に移動します。また、後ろに移動することもできます。

config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns

ミドルウェアをスタックから完全に削除することもできます。

config.middleware.delete Rack::MethodOverride

3.6 i18nの設定

これらの設定オプションはすべてI18nライブラリに委譲されます。

3.6.1 config.i18n.available_locales

アプリケーションで許可される利用可能なロケールを定義します。通常、新しいアプリケーションではロケールファイルで見つかるすべてのロケールキー、通常は:enのみがデフォルトです。

3.6.2 config.i18n.default_locale

i18nで使用されるアプリケーションのデフォルトロケールを設定します。デフォルトは:enです。

3.6.3 config.i18n.enforce_available_locales

i18nを介して渡されるすべてのロケールがavailable_localesリストに宣言されている必要があることを保証し、利用できないロケールを設定するとI18n::InvalidLocale例外が発生するようにします。デフォルトはtrueです。ユーザーの入力からの無効なロケールの設定を防ぐセキュリティ対策として、このオプションを無効にしないことをお勧めします。

3.6.4 config.i18n.load_path

Railsがロケールファイルを検索するために使用するパスを設定します。デフォルトはconfig/locales/**/*.{yml,rb}です。

3.6.5 config.i18n.raise_on_missing_translations

翻訳が見つからない場合にエラーを発生させるかどうかを決定します。デフォルトはfalseです。

3.6.6 config.i18n.fallbacks

翻訳が見つからない場合のフォールバックの動作を設定します。このオプションの使用例を3つ示します。

  • デフォルトのロケールをフォールバックとして使用するために、オプションをtrueに設定できます。以下のように設定します。

    config.i18n.fallbacks = true
    
  • フォールバックとしてロケールの配列を設定することもできます。以下のように設定します。

    config.i18n.fallbacks = [:tr, :en]
    
  • 個々のロケールに対して異なるフォールバックを設定することもできます。たとえば、:az:deには:trを、:daには:enをフォールバックとして使用したい場合、以下のように設定できます。

    config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
    #または
    config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
    

3.7 Active Modelの設定

3.7.1 config.active_model.i18n_customize_full_message

i18nロケールファイルでError#full_messageのフォーマットを上書きできるかどうかを制御します。デフォルトはfalseです。

trueに設定すると、full_messageはロケールファイルの属性およびモデルレベルでフォーマットを探します。デフォルトのフォーマットは"%{attribute} %{message}"で、attributeは属性の名前、messageはバリデーション固有のメッセージです。以下の例では、Personのすべての属性と特定の属性(age)のフォーマットを上書きしています。

class Person
  include ActiveModel::Validations

  attr_accessor :name, :age

  validates :name, :age, presence: true
end
en:
  activemodel: # or activerecord:
    errors:
      models:
        person:
          # すべてのPersonの属性のフォーマットを上書きします:
          format: "Invalid %{attribute} (%{message})"
          attributes:
            age:
              # age属性のフォーマットを上書きします:
              format: "%{message}"
              blank: "Please fill in your %{attribute}"
irb> person = Person.new.tap(&:valid?)

irb> person.errors.full_messages
=> [
  "Invalid Name (can’t be blank)",
  "Please fill in your Age"
]

irb> person.errors.messages
=> {
  :name => ["can’t be blank"],
  :age  => ["Please fill in your Age"]
}

3.8 Active Recordの設定

config.active_recordにはさまざまな設定オプションが含まれています。

3.8.1 config.active_record.logger

Log4rのインターフェースに準拠するロガーまたはデフォルトのRuby Loggerクラスを受け入れます。これは新しいデータベース接続に渡されます。Active RecordモデルクラスまたはActive Recordモデルインスタンスのloggerを呼び出すことでこのロガーを取得できます。ログを無効にするにはnilに設定します。

3.8.2 config.active_record.primary_key_prefix_type

プライマリキーカラムの命名を調整することができます。デフォルトでは、Railsはプライマリキーカラムをidと仮定します(この設定オプションは設定する必要はありません)。他に2つの選択肢があります。 * :table_name は、Customer クラスの主キーを customerid にします。 * :table_name_with_underscore は、Customer クラスの主キーを customer_id にします。

3.8.3 config.active_record.table_name_prefix

テーブル名の前に追加するグローバルな文字列を設定します。これを northwest_ に設定すると、Customer クラスは northwest_customers をテーブルとして使用します。デフォルトは空の文字列です。

3.8.4 config.active_record.table_name_suffix

テーブル名の後に追加するグローバルな文字列を設定します。これを _northwest に設定すると、Customer クラスは customers_northwest をテーブルとして使用します。デフォルトは空の文字列です。

3.8.5 config.active_record.schema_migrations_table_name

スキーママイグレーションテーブルの名前として使用する文字列を設定します。

3.8.6 config.active_record.internal_metadata_table_name

内部メタデータテーブルの名前として使用する文字列を設定します。

3.8.7 config.active_record.protected_environments

破壊的なアクションが禁止される環境の名前の配列を設定します。

3.8.8 config.active_record.pluralize_table_names

Rails がデータベース内の単数形または複数形のテーブル名を探すかを指定します。true に設定すると(デフォルト)、Customer クラスは customers テーブルを使用します。false に設定すると、Customer クラスは customer テーブルを使用します。

3.8.9 config.active_record.default_timezone

データベースから日付と時刻を取得する際に Time.local:local に設定されている場合)または Time.utc:utc に設定されている場合)を使用するかを決定します。デフォルトは :utc です。

3.8.10 config.active_record.schema_format

データベースのスキーマをファイルにダンプするためのフォーマットを制御します。オプションは、マイグレーションに依存するデータベース非依存のバージョンである :ruby(デフォルト)または(データベースに依存する可能性のある)SQL ステートメントのセットである :sql です。

3.8.11 config.active_record.error_on_ignored_order

バッチクエリの実行中にクエリの順序が無視された場合にエラーを発生させるかどうかを指定します。オプションは true(エラーを発生させる)または false(警告を表示する)です。デフォルトは false です。

3.8.12 config.active_record.timestamped_migrations

マイグレーションの番号付けに連続した整数またはタイムスタンプを使用するかどうかを制御します。デフォルトは true で、複数の開発者が同じアプリケーションで作業している場合はタイムスタンプが推奨されます。

3.8.13 config.active_record.db_warnings_action

SQL クエリが警告を生成した場合に実行するアクションを制御します。次のオプションが利用可能です:

  • :ignore - データベースの警告は無視されます。これがデフォルトです。

  • :log - データベースの警告は ActiveRecord.logger:warn レベルでログに記録されます。

  • :raise - データベースの警告は ActiveRecord::SQLWarning として発生します。

  • :report - データベースの警告は Rails のエラーレポーターのサブスクライバに報告されます。

  • カスタムな proc - カスタムな proc を指定できます。SQLWarning エラーオブジェクトを受け入れる必要があります。 例えば:

config.active_record.db_warnings_action = ->(warning) do
  # カスタムの例外報告サービスに報告する
  Bugsnag.notify(warning.message) do |notification|
    notification.add_metadata(:warning_code, warning.code)
    notification.add_metadata(:warning_level, warning.level)
  end
end

3.8.14 config.active_record.db_warnings_ignore

設定されたdb_warnings_actionに関係なく、無視されるべき警告コードとメッセージのホワイトリストを指定します。 デフォルトの動作はすべての警告を報告することです。無視する警告は文字列または正規表現で指定できます。例えば:

config.active_record.db_warnings_action = :raise
# 以下の警告は発生しません
config.active_record.db_warnings_ignore = [
  /Invalid utf8mb4 character string/,
  "An exact warning message",
  "1062", # MySQL Error 1062: Duplicate entry
]

3.8.15 config.active_record.migration_strategy

マイグレーションでスキーマステートメントメソッドを実行するために使用されるストラテジークラスを制御します。デフォルトのクラスは 接続アダプタに委譲します。カスタムのストラテジーはActiveRecord::Migration::ExecutionStrategyを継承するか、 実装されていないメソッドのデフォルトの動作を保持するためにDefaultStrategyを継承することができます:

class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
  def drop_table(*)
    raise "Dropping tables is not supported!"
  end
end

config.active_record.migration_strategy = CustomMigrationStrategy

3.8.16 config.active_record.lock_optimistically

Active Recordが楽観的ロックを使用するかどうかを制御し、デフォルトではtrueです。

3.8.17 config.active_record.cache_timestamp_format

キャッシュキーのタイムスタンプ値のフォーマットを制御します。デフォルトは:usecです。

3.8.18 config.active_record.record_timestamps

モデルのcreateおよびupdate操作のタイムスタンプの記録が行われるかどうかを制御するブール値です。デフォルト値はtrueです。

3.8.19 config.active_record.partial_inserts

新しいレコードを作成する際に部分的な書き込みが使用されるかどうかを制御するブール値です(つまり、デフォルトと異なる属性のみが設定されるかどうか)。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元々の値) true
7.0 false

3.8.20 config.active_record.partial_updates

既存のレコードを更新する際に部分的な書き込みが使用されるかどうかを制御するブール値です(つまり、変更された属性のみが設定されるかどうか)。部分的な更新を使用する場合は、可能性のある古い読み取り状態に基づいて属性を書き込むため、楽観的ロックconfig.active_record.lock_optimisticallyも使用する必要があります。デフォルト値はtrueです。

3.8.21 config.active_record.maintain_test_schema

テストデータベースのスキーマをdb/schema.rb(またはdb/structure.sql)と最新の状態に保つかどうかを制御するブール値です。デフォルトはtrueです。

3.8.22 config.active_record.dump_schema_after_migration

マイグレーションを実行する際にスキーマダンプ(db/schema.rbまたはdb/structure.sql)を行うかどうかを制御するフラグです。これはRailsによって生成されるconfig/environments/production.rbではfalseに設定されています。この設定がされていない場合、デフォルト値はtrueです。

3.8.23 config.active_record.dump_schemas

db:schema:dumpを呼び出した際にダンプされるデータベーススキーマを制御します。 オプションは:schema_search_path(デフォルト)で、schema_search_pathにリストされているスキーマをダンプします。 :allschema_search_pathに関係なくすべてのスキーマを常にダンプします。 または、カンマで区切られたスキーマの文字列です。

3.8.24 config.active_record.before_committed_on_all_records

トランザクションに登録されたすべてのレコードに対してbefore_committed!コールバックを有効にします。 以前の動作では、同じレコードの複数のコピーがトランザクションに登録されている場合、最初のコピーのみコールバックが実行されました。

バージョンから開始 デフォルト値は
(元の値) false
7.1 true

3.8.25 config.active_record.belongs_to_required_by_default

ブール値で、belongs_to関連付けが存在しない場合にレコードがバリデーションに失敗するかどうかを制御します。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値は
(元の値) nil
5.0 true

3.8.26 config.active_record.belongs_to_required_validates_foreign_key

親が必須の場合に、親に関連する列の存在のみを検証するようにします。 以前の動作では、親レコードの存在を検証し、子レコードが更新されるたびに親を取得するため、親が変更されていない場合でも余分なクエリが実行されました。

バージョンから開始 デフォルト値は
(元の値) true
7.1 false

3.8.27 config.active_record.marshalling_format_version

7.1に設定すると、Active Recordインスタンスのシリアル化にMarshal.dumpを使用した効率的な方法が有効になります。

これにより、シリアル化形式が変更されるため、この方法でシリアル化されたモデルは古い(< 7.1)バージョンのRailsでは読み取ることができません。ただし、この最適化が有効になっているかどうかに関係なく、古い形式を使用するメッセージは引き続き読み取ることができます。

バージョンから開始 デフォルト値は
(元の値) 6.1
7.1 7.1

3.8.28 config.active_record.action_on_strict_loading_violation

関連付けにstrict_loadingが設定されている場合に例外を発生させるか、ログに記録するかを制御します。デフォルト値はすべての環境で:raiseです。例外を発生させる代わりに違反をロガーに送信するために:logに変更することもできます。

3.8.29 config.active_record.strict_loading_by_default

ブール値で、strict_loadingモードをデフォルトで有効または無効にします。デフォルトはfalseです。

3.8.30 config.active_record.warn_on_records_fetched_greater_than

クエリの結果のサイズに対する警告の閾値を設定できます。クエリによって返されるレコードの数が閾値を超える場合、警告がログに記録されます。これにより、メモリの膨張を引き起こす可能性のあるクエリを特定することができます。

3.8.31 config.active_record.index_nested_attribute_errors

has_manyのネストした関係のエラーをインデックスとともに表示することができます。デフォルトはfalseです。

3.8.32 config.active_record.use_schema_cache_dump

データベースへのクエリを送信せずに、db/schema_cache.ymlからスキーマキャッシュ情報を取得できるようにします(bin/rails db:schema:cache:dumpによって生成されます)。デフォルトはtrueです。

3.8.33 config.active_record.cache_versioning

#cache_versionメソッドで変化するバージョンと共に安定した#cache_keyメソッドを使用するかどうかを示します。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。

バージョン デフォルト値
(元の値) false
5.2 true

3.8.34 config.active_record.collection_cache_versioning

キャッシュされるオブジェクトのタイプがActiveRecord::Relationである場合、リレーションのキャッシュキーのボラティル情報(最大更新日時とカウント)をキャッシュバージョンに移動して、同じキャッシュキーを再利用できるようにします。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。

バージョン デフォルト値
(元の値) false
6.0 true

3.8.35 config.active_record.has_many_inversing

belongs_toからhas_manyへの関連付けをトラバースする際に、逆のレコードを設定できるようにします。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。

バージョン デフォルト値
(元の値) false
6.1 true

3.8.36 config.active_record.automatic_scope_inversing

スコープを持つ関連付けに対してinverse_ofを自動的に推測できるようにします。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。

バージョン デフォルト値
(元の値) false
7.0 true

3.8.37 config.active_record.destroy_association_async_job

関連するレコードをバックグラウンドで破棄するために使用されるジョブを指定できます。デフォルトはActiveRecord::DestroyAssociationAsyncJobです。

3.8.38 config.active_record.destroy_association_async_batch_size

dependent: :destroy_async関連オプションによってバックグラウンドジョブで破棄される最大レコード数を指定できます。他の条件が同じ場合、バッチサイズが小さいほど、より多くの短時間実行のバックグラウンドジョブがエンキューされます。一方、バッチサイズが大きいほど、より少ない長時間実行のバックグラウンドジョブがエンキューされます。このオプションのデフォルト値はnilで、同じ関連の依存レコードが同じバックグラウンドジョブで破棄されます。

3.8.39 config.active_record.queues.destroy

破棄ジョブに使用するActive Jobキューを指定できます。このオプションがnilの場合、パージジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルトはnilです。

3.8.40 config.active_record.enumerate_columns_in_select_statements

trueの場合、常にSELECT文にカラム名を含め、ワイルドカードのSELECT * FROM ...クエリを避けます。これにより、PostgreSQLデータベースにカラムを追加する際のプリペアドステートメントキャッシュエラーを回避できます。デフォルトはfalseです。

3.8.41 config.active_record.verify_foreign_keys_for_fixtures

テストでフィクスチャがロードされた後にすべての外部キー制約が有効であることを確認します。PostgreSQLとSQLiteのみでサポートされています。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
7.0 true

3.8.42 config.active_record.raise_on_assign_to_attr_readonly

attr_readonly属性への代入時に例外を発生させるようにします。以前の動作では、代入は許可されますが、データベースへの変更は黙って保存されませんでした。

バージョン デフォルト値
(元の値) false
7.1 true

3.8.43 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction

複数のActive Recordインスタンスがトランザクション内で同じレコードを変更する場合、Railsはafter_commitまたはafter_rollbackコールバックを1つのインスタンスのみに実行します。このオプションは、Railsがどのインスタンスにコールバックを送信するかを指定します。

trueの場合、トランザクションのコミットコールバックは最初に保存されたインスタンスで実行されますが、そのインスタンスの状態が古くなっている可能性があります。

falseの場合、トランザクションのコミットコールバックは最新のインスタンス状態を持つインスタンスで実行されます。これらのインスタンスは次のように選択されます。

  • 一般的には、トランザクション内で特定のレコードを保存する最後のインスタンスでトランザクションのコミットコールバックを実行します。
  • ただし、2つの例外があります。
    • レコードがトランザクション内で作成され、別のインスタンスによって更新された場合、after_create_commitコールバックは2番目のインスタンスで実行されます。これは、そのインスタンスの状態に基づいて単純に実行されるはずのafter_update_commitコールバックの代わりです。
    • レコードがトランザクション内で削除され、その後に古いインスタンスが更新を実行した場合、after_destroy_commitコールバックは最後に削除されたインスタンスで実行されます(これにより、0行に影響を与えた更新が行われた可能性があります)。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) true
7.1 false

3.8.44 config.active_record.default_column_serializer

指定されていない場合に使用するシリアライザの実装です。指定されていない場合、serializeおよびstoreは、デフォルトでYAMLを使用していましたが、これは効率的なフォーマットではなく、注意深く使用しないとセキュリティの脆弱性の原因になる可能性があります。

そのため、データベースのシリアル化にはより厳密で制限されたフォーマットを使用することを推奨します。 残念ながら、Rubyの標準ライブラリには適切なデフォルトはありません。JSONはフォーマットとして機能するかもしれませんが、jsonのgemはサポートされていない型を文字列に変換するため、バグが発生する可能性があります。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから始まる デフォルト値は
(元の) YAML
7.1 nil

3.8.45 config.active_record.run_after_transaction_callbacks_in_order_defined

trueの場合、after_commitコールバックはモデルで定義された順序で実行されます。falseの場合、逆の順序で実行されます。

他のすべてのコールバックは、モデルで定義された順序で常に実行されます(prepend: trueを使用しない限り)。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから始まる デフォルト値は
(元の) false
7.1 true

3.8.46 config.active_record.query_log_tags_enabled

アダプターレベルのクエリコメントを有効にするかどうかを指定します。デフォルトはfalseです。

注意:これをtrueに設定すると、データベースのプリペアドステートメントが自動的に無効になります。

3.8.47 config.active_record.query_log_tags

SQLコメントに挿入されるキー/値タグを指定するArrayを定義します。デフォルトは[ :application ]で、アプリケーション名を返す事前定義のタグです。

3.8.48 config.active_record.query_log_tags_format

タグのフォーマッターを指定するSymbolです。有効な値は:sqlcommenter:legacyです。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから始まる デフォルト値は
(元の) :legacy
7.1 :sqlcommenter

3.8.49 config.active_record.cache_query_log_tags

クエリログタグのキャッシュを有効にするかどうかを指定します。大量のクエリを持つアプリケーションでは、クエリログタグのキャッシュは、リクエストやジョブの実行の寿命中にコンテキストが変わらない場合にパフォーマンスの利点を提供することができます。デフォルトはfalseです。

3.8.50 config.active_record.schema_cache_ignored_tables

スキーマキャッシュの生成時に無視するテーブルのリストを定義します。テーブル名を表す文字列または正規表現のArrayを受け入れます。

3.8.51 config.active_record.verbose_query_logs

データベースクエリを呼び出すメソッドのソース位置を関連するクエリの下にログに記録するかどうかを指定します。デフォルトでは、開発環境ではフラグがtrueになり、他のすべての環境ではfalseになります。

3.8.52 config.active_record.sqlite3_adapter_strict_strings_by_default

SQLite3Adapterを厳密な文字列モードで使用するかどうかを指定します。厳密な文字列モードの使用は、二重引用符で囲まれた文字列リテラルを無効にします。

SQLiteには二重引用符で囲まれた文字列リテラルに関するいくつかの特異点があります。 まず、二重引用符で囲まれた文字列を識別子として考慮しようとしますが、存在しない場合は文字列リテラルとして考慮します。そのため、タイプミスが静かに見落とされる可能性があります。 たとえば、存在しない列にインデックスを作成することができます。 詳細については、SQLiteのドキュメントを参照してください。 デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) false
7.1 true

3.8.53 config.active_record.async_query_executor

非同期クエリのプール方法を指定します。

デフォルトはnilで、load_asyncが無効になり、代わりにクエリを直接フォアグラウンドで実行します。 クエリを実際に非同期に実行するには、config.active_record.async_query_executor:global_thread_poolまたは:multi_thread_poolに設定する必要があります。

:global_thread_poolは、アプリケーションが接続するすべてのデータベースに対して単一のプールを使用します。これは、単一のデータベースを持つアプリケーションや、常に1つのデータベースシャードのみをクエリするアプリケーションに適した構成です。

:multi_thread_poolは、データベースごとに1つのプールを使用し、各プールのサイズはdatabase.ymlmax_threadsmin_threadプロパティを介して個別に設定できます。これは、複数のデータベースを定期的にクエリし、最大同時実行数をより正確に定義する必要があるアプリケーションに役立ちます。

3.8.54 config.active_record.global_executor_concurrency

config.active_record.async_query_executor = :global_thread_poolと共に使用され、同時に実行できる非同期クエリの数を定義します。

デフォルトは4です。

この数は、database.ymlで設定されたデータベースプールのサイズと合わせて考慮する必要があります。接続プールは、フォアグラウンドスレッド(例:Webサーバーまたはジョブワーカースレッド)とバックグラウンドスレッドの両方を収容するのに十分な大きさである必要があります。

3.8.55 config.active_record.allow_deprecated_singular_associations_name

これにより、where句で単数の関連を複数形の名前で参照できる非推奨の動作が有効になります。これをfalseに設定すると、パフォーマンスが向上します。

class Comment < ActiveRecord::Base
  belongs_to :post
end

Comment.where(post: post_id).count  # => 5

# `allow_deprecated_singular_associations_name`がtrueの場合:
Comment.where(posts: post_id).count # => 5 (非推奨の警告)

# `allow_deprecated_singular_associations_name`がfalseの場合:
Comment.where(posts: post_id).count # => エラー

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) true
7.1 false

3.8.56 config.active_record.yaml_column_permitted_classes

デフォルトは[Symbol]です。アプリケーションがActiveRecord::Coders::YAMLColumnsafe_load()に追加の許可されたクラスを含めることを許可します。

3.8.57 config.active_record.use_yaml_unsafe_load

デフォルトはfalseです。アプリケーションがActiveRecord::Coders::YAMLColumnunsafe_loadを使用することを選択できるようにします。

3.8.58 config.active_record.raise_int_wider_than_64bit

デフォルトはtrueです。PostgreSQLアダプタに64ビット符号付き表現よりも広い整数が提供された場合に例外を発生させるかどうかを決定します。

3.8.59 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleansおよびActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans

Active Record MySQLアダプタがすべてのtinyint(1)列をブール値として扱うかどうかを制御します。デフォルトはtrueです。

3.8.60 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables

PostgreSQLによって作成されたデータベーステーブルが「unlogged」になるかどうかを制御します。これによりパフォーマンスが向上しますが、データベースがクラッシュした場合のデータの損失のリスクが増加します。本番環境ではこれを有効にしないことを強くお勧めします。すべての環境でデフォルトはfalseです。 テストのためにこれを有効にするには:

# config/environments/test.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.create_unlogged_tables = true
end

3.8.61 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

Active Record PostgreSQLアダプターがマイグレーションやスキーマでdatetimeを呼び出したときに使用するネイティブタイプを制御します。設定されたNATIVE_DATABASE_TYPESのいずれかに対応するシンボルを取ります。デフォルトは:timestampで、マイグレーションのt.datetimeは「タイムゾーンなしのタイムスタンプ」カラムを作成します。

「タイムゾーンありのタイムスタンプ」を使用するには:

# config/application.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.datetime_type = :timestamptz
end

これを変更した場合は、bin/rails db:migrateを実行してschema.rbを再構築する必要があります。

3.8.62 ActiveRecord::SchemaDumper.ignore_tables

生成されるスキーマファイルに含まれないテーブルの配列を受け入れます。

3.8.63 ActiveRecord::SchemaDumper.fk_ignore_pattern

外部キーの名前がdb/schema.rbにダンプされるかどうかを決定するために使用される異なる正規表現を設定できます。デフォルトでは、fk_rails_で始まる外部キー名はデータベーススキーマダンプにエクスポートされません。デフォルトは/^fk_rails_[0-9a-f]{10}$/です。

3.8.64 config.active_record.encryption.hash_digest_class

Active Record Encryptionで使用されるダイジェストアルゴリズムを設定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョンから開始 デフォルト値
(元の値) OpenSSL::Digest::SHA1
7.1 OpenSSL::Digest::SHA256

3.8.65 config.active_record.encryption.support_sha1_for_non_deterministic_encryption

SHA-1ダイジェストクラスを使用して暗号化された既存のデータの復号をサポートするかどうかを有効にします。falseの場合、config.active_record.encryption.hash_digest_classで設定されたダイジェストのみをサポートします。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョンから開始 デフォルト値
(元の値) true
7.1 false

3.9 Action Controllerの設定

config.action_controllerには、いくつかの設定が含まれています:

3.9.1 config.action_controller.asset_host

アセットのホストを設定します。アプリケーションサーバー自体ではなく、CDNがアセットをホストする場合に便利です。これはAction Mailerの設定と異なる場合にのみ使用する必要があります。そうでなければ、config.asset_hostを使用してください。

3.9.2 config.action_controller.perform_caching

アプリケーションがAction Controllerコンポーネントが提供するキャッシュ機能を使用するかどうかを設定します。開発環境ではfalseに設定し、本番環境ではtrueに設定します。指定されていない場合、デフォルトはtrueになります。

3.9.3 config.action_controller.default_static_extension

キャッシュされたページに使用される拡張子を設定します。デフォルトは.htmlです。

3.9.4 config.action_controller.include_all_helpers

すべてのビューヘルパーがどこでも使用可能か、対応するコントローラーにスコープがあるかを設定します。falseに設定すると、UsersHelperメソッドはUsersControllerの一部としてレンダリングされるビューでのみ使用できます。trueの場合、UsersHelperメソッドはどこでも使用できます。このオプションが明示的にtrueまたはfalseに設定されていない場合のデフォルトの設定動作は、すべてのビューヘルパーが各コントローラーで使用できることです。

3.9.5 config.action_controller.logger

Log4rまたはデフォルトのRuby Loggerクラスに準拠するロガーを受け入れ、それを使用してAction Controllerから情報をログに記録します。ログを無効にするにはnilに設定します。

3.9.6 config.action_controller.request_forgery_protection_token

RequestForgeryのトークンパラメータ名を設定します。protect_from_forgeryを呼び出すと、デフォルトで:authenticity_tokenに設定されます。

3.9.7 config.action_controller.allow_forgery_protection

CSRF保護を有効または無効にします。デフォルトでは、テスト環境ではfalse、その他のすべての環境ではtrueです。

3.9.8 config.action_controller.forgery_protection_origin_check

HTTPのOriginヘッダーがサイトのオリジンと一致するかどうかをチェックするかどうかを設定します。デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) false
5.0 true

3.9.9 config.action_controller.per_form_csrf_tokens

CSRFトークンが生成されたメソッド/アクションにのみ有効かどうかを設定します。デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) false
5.0 true

3.9.10 config.action_controller.default_protect_from_forgery

ActionController::Baseに対してForgery保護が追加されるかどうかを決定します。デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) false
5.2 true

3.9.11 config.action_controller.relative_url_root

Railsがサブディレクトリにデプロイされていることを伝えるために使用できます。デフォルトは config.relative_url_rootです。

3.9.12 config.action_controller.permit_all_parameters

デフォルトで、マスアサインメントのためにすべてのパラメータが許可されます。デフォルト値はfalseです。

3.9.13 config.action_controller.action_on_unpermitted_parameters

明示的に許可されていないパラメータが見つかった場合の動作を制御します。デフォルト値はテスト環境と開発環境では:log、それ以外ではfalseです。値は次のとおりです。

  • false:何も行動しない
  • :logunpermitted_parameters.action_controllerトピックでActiveSupport::Notifications.instrumentイベントを発行し、DEBUGレベルでログを出力する
  • :raiseActionController::UnpermittedParameters例外を発生させる

3.9.14 config.action_controller.always_permitted_parameters

デフォルトで許可されている許可されたパラメータのリストを設定します。デフォルト値は['controller', 'action']です。

3.9.15 config.action_controller.enable_fragment_cache_logging

フラグメントキャッシュの読み取りと書き込みを詳細な形式でログに記録するかどうかを決定します。デフォルトでは次のように設定されています。

Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

デフォルトではfalseに設定されており、次の出力が生成されます。

Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

3.9.16 config.action_controller.raise_on_open_redirects

許可されていないオープンリダイレクトが発生した場合に、ActionController::Redirecting::UnsafeRedirectErrorを発生させます。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン) false
7.0 true

3.9.17 config.action_controller.log_query_tags_around_actions

クエリタグのコントローラコンテキストがaround_filterを介して自動的に更新されるかどうかを決定します。デフォルト値はtrueです。

3.9.18 config.action_controller.wrap_parameters_by_default

ParamsWrapperをデフォルトでJSONリクエストをラップするように設定します。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン) false
7.0 true

3.9.19 ActionController::Base.wrap_parameters

ParamsWrapperを設定します。これはトップレベルで呼び出すことも、個々のコントローラで呼び出すこともできます。

3.9.20 config.action_controller.allow_deprecated_parameters_hash_equality

ActionController::Parameters#==Hash引数との振る舞いを制御します。設定の値によって、ActionController::Parametersインスタンスが等しいかどうかが決まります。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン) true
7.1 false

3.10 Action Dispatchの設定

3.10.1 config.action_dispatch.cookies_serializer

クッキーに使用するシリアライザを指定します。config.active_support.message_serializerと同じ値を受け入れます。また、:hybridjson_allow_marshalのエイリアスです。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン) :marshal
7.0 :json

3.10.2 config.action_dispatch.debug_exception_log_level

リクエスト中に未処理の例外が発生した場合に、DebugExceptionsミドルウェアが使用するログレベルを設定します。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン) :fatal
7.1 :error

3.10.3 config.action_dispatch.default_headers

各レスポンスでデフォルトで設定されるHTTPヘッダーのハッシュです。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョンから デフォルト値
(元のバージョン)
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "1; mode=block",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.0
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.1
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}

3.10.4 config.action_dispatch.default_charset

すべてのレンダリングのデフォルトの文字セットを指定します。デフォルトはnilです。

3.10.5 config.action_dispatch.tld_length

アプリケーションのトップレベルドメイン(TLD)の長さを設定します。デフォルトは1です。

3.10.6 config.action_dispatch.ignore_accept_header

リクエストからAcceptヘッダーを無視するかどうかを決定するために使用されます。デフォルトはfalseです。

3.10.7 config.action_dispatch.x_sendfile_header

サーバー固有のX-Sendfileヘッダーを指定します。これはサーバーからの高速なファイル送信に役立ちます。たとえば、Apacheの場合は'X-Sendfile'に設定できます。

3.10.8 config.action_dispatch.http_auth_salt

HTTP Authのsalt値を設定します。デフォルトは'http authentication'です。

署名付きクッキーのsalt値を設定します。デフォルトは'signed cookie'です。

暗号化されたクッキーのsalt値を設定します。デフォルトは'encrypted cookie'です。

署名付き暗号化クッキーのsalt値を設定します。デフォルトは'signed encrypted cookie'です。

認証付き暗号化クッキーのsalt値を設定します。デフォルトは'authenticated encrypted cookie'です。

暗号化クッキーに使用する暗号方式を設定します。デフォルトは"aes-256-gcm"です。

署名付きクッキーに使用するダイジェストを設定します。デフォルトは"SHA1"です。

3.10.15 config.action_dispatch.cookies_rotations

暗号化および署名付きクッキーの秘密、暗号方式、およびダイジェストをローテーションすることを許可します。

署名付きおよび暗号化クッキーがAES-256-GCM暗号または古いAES-256-CBC暗号を使用するかどうかを制御します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
5.2 true

3.10.17 config.action_dispatch.use_cookies_with_metadata

目的のメタデータを埋め込んだクッキーの書き込みを有効にします。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
6.0 true

3.10.18 config.action_dispatch.perform_deep_munge

パラメータに対してdeep_mungeメソッドを実行するかどうかを設定します。 詳細については、セキュリティガイドを参照してください。デフォルトはtrueです。

3.10.19 config.action_dispatch.rescue_responses

HTTPステータスに割り当てられる例外を設定します。ハッシュを受け入れ、例外/ステータスのペアを指定できます。デフォルトでは次のように定義されています。

config.action_dispatch.rescue_responses = {
  'ActionController::RoutingError'
    => :not_found,
  'AbstractController::ActionNotFound'
    => :not_found,
  'ActionController::MethodNotAllowed'
    => :method_not_allowed,
  'ActionController::UnknownHttpMethod'
    => :method_not_allowed,
  'ActionController::NotImplemented'
    => :not_implemented,
  'ActionController::UnknownFormat'
    => :not_acceptable,
  'ActionController::InvalidAuthenticityToken'
    => :unprocessable_entity,
  'ActionController::InvalidCrossOriginRequest'
    => :unprocessable_entity,
  'ActionDispatch::Http::Parameters::ParseError'
    => :bad_request,
  'ActionController::BadRequest'
    => :bad_request,
  'ActionController::ParameterMissing'
    => :bad_request,
  'Rack::QueryParser::ParameterTypeError'
    => :bad_request,
  'Rack::QueryParser::InvalidParameterError'
    => :bad_request,
  'ActiveRecord::RecordNotFound'
    => :not_found,
  'ActiveRecord::StaleObjectError'
    => :conflict,
  'ActiveRecord::RecordInvalid'
    => :unprocessable_entity,
  'ActiveRecord::RecordNotSaved'
    => :unprocessable_entity
}

設定されていない例外はすべて500 Internal Server Errorにマッピングされます。

3.10.20 config.action_dispatch.cookies_same_site_protection

クッキーを設定する際のSameSite属性のデフォルト値を設定します。 nilに設定すると、SameSite属性は追加されません。リクエストに基づいてSameSite属性の値を動的に設定するには、procを指定できます。例えば: ruby config.action_dispatch.cookies_same_site_protection = ->(request) do :strict unless request.user_agent == "TestAgent" end

デフォルト値は config.load_defaults のターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) nil
6.1 :lax

3.10.21 config.action_dispatch.ssl_default_redirect_status

ActionDispatch::SSL ミドルウェアで、HTTP から HTTPS へのリダイレクト時に非 GET/HEAD リクエストに使用されるデフォルトの HTTP ステータスコードを設定します。

デフォルト値は config.load_defaults のターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) 307
6.1 308

3.10.22 config.action_dispatch.log_rescued_responses

rescue_responses で設定された未処理の例外をログに記録するかどうかを設定します。デフォルトは true です。

3.10.23 ActionDispatch::Callbacks.before

リクエストの前に実行するコードのブロックを受け取ります。

3.10.24 ActionDispatch::Callbacks.after

リクエストの後に実行するコードのブロックを受け取ります。

3.11 Action View の設定

config.action_view には、いくつかの設定が含まれています:

3.11.1 config.action_view.cache_template_loading

テンプレートを各リクエストごとに再読み込みするかどうかを制御します。デフォルトは !config.enable_reloading です。

3.11.2 config.action_view.field_error_proc

Active Model からのエラーを表示するための HTML ジェネレータを提供します。ブロックは Action View テンプレートのコンテキストで評価されます。デフォルトは以下の通りです。

Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }

3.11.3 config.action_view.default_form_builder

Rails にデフォルトで使用するフォームビルダを指定します。デフォルトは ActionView::Helpers::FormBuilder です。フォームビルダクラスを初期化後にロードするようにしたい場合(開発環境では各リクエストで再読み込みされるため)、String として渡すことができます。

3.11.4 config.action_view.logger

Log4r のインターフェースに準拠するロガーまたはデフォルトの Ruby Logger クラスを受け入れ、Action View からの情報をログに記録します。ログを無効にするには nil を設定します。

3.11.5 config.action_view.erb_trim_mode

ERB で使用するトリムモードを指定します。デフォルトは '-' で、<%= -%><%= =%> を使用すると末尾のスペースと改行をトリミングします。詳細は Erubis のドキュメント を参照してください。

3.11.6 config.action_view.frozen_string_literal

ERB テンプレートを # frozen_string_literal: true のマジックコメントでコンパイルし、すべての文字列リテラルを凍結して割り当てを節約します。すべてのビューで有効にするには true を設定します。

3.11.7 config.action_view.embed_authenticity_token_in_remote_forms

remote: true を持つフォームの authenticity_token のデフォルト動作を設定します。デフォルトでは false に設定されており、リモートフォームには authenticity_token が含まれません。これはフォームをフラグメントキャッシュしている場合に便利です。リモートフォームは meta タグから認証情報を取得するため、埋め込みは JavaScript がサポートされていないブラウザでない限りは不要です。その場合、フォームオプションとして authenticity_token: true を渡すか、この設定を true に設定することができます。

3.11.8 config.action_view.prefix_partial_path_with_controller_namespace

名前空間付きコントローラからレンダリングされるテンプレートのサブディレクトリからパーシャルを検索するかどうかを決定します。例えば、Admin::ArticlesControllerという名前のコントローラが次のテンプレートをレンダリングする場合を考えてみましょう。

<%= render @article %>

デフォルトの設定はtrueで、/admin/articles/_article.erbのパーシャルが使用されます。値をfalseに設定すると、/articles/_article.erbがレンダリングされ、これはArticlesControllerのような名前空間のないコントローラからレンダリングする場合と同じ動作です。

3.11.9 config.action_view.automatically_disable_submit_tag

submit_tagがクリック時に自動的に無効になるかどうかを決定します。デフォルトはtrueです。

3.11.10 config.action_view.debug_missing_translation

欠落している翻訳キーを<span>タグで囲むかどうかを決定します。デフォルトはtrueです。

3.11.11 config.action_view.form_with_generates_remote_forms

form_withがリモートフォームを生成するかどうかを決定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
5.1 true
6.1 false

3.11.12 config.action_view.form_with_generates_ids

form_withが入力要素にIDを生成するかどうかを決定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元々) false
5.2 true

3.11.13 config.action_view.default_enforce_utf8

フォームがUTF-8でエンコードされた状態で古いバージョンのInternet Explorerに送信されるようにするための隠しタグが生成されるかどうかを決定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元々) true
6.0 false

3.11.14 config.action_view.image_loading

image_tagヘルパーによってレンダリングされる<img>タグのloading属性のデフォルト値を指定します。例えば、"lazy"に設定すると、image_tagによってレンダリングされる<img>タグにloading="lazy"が含まれ、ブラウザに画像がビューポートの近くになるまで読み込まないように指示します。(この値はimage_tagloading: "eager"などを渡すことで個別の画像ごとにオーバーライドすることもできます。)デフォルトはnilです。

3.11.15 config.action_view.image_decoding

image_tagヘルパーによってレンダリングされる<img>タグのdecoding属性のデフォルト値を指定します。デフォルトはnilです。

3.11.16 config.action_view.annotate_rendered_view_with_filenames

レンダリングされたビューにテンプレートファイル名を注釈付けするかどうかを決定します。デフォルトはfalseです。

javascript_include_tagstylesheet_link_tagがアセットをプリロードするLinkヘッダを生成するかどうかを決定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元々) nil
6.1 true

3.11.18 config.action_view.button_to_generates_button_tag

button_to<button>要素をレンダリングするかどうかを判断します。コンテンツが最初の引数として渡されるかブロックとして渡されるかに関係なく、デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) false
7.0 true

3.11.19 config.action_view.apply_stylesheet_media_default

stylesheet_link_tagmedia属性のデフォルト値としてscreenをレンダリングするかどうかを決定します。デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) true
7.0 false

3.11.20 config.action_view.prepend_content_exfiltration_prevention

form_tagbutton_toヘルパーが、その内容が前の閉じられていないタグによってキャプチャされることがないようにするために、ブラウザセーフ(しかし技術的には無効な)HTMLでプレフィックスされたHTMLタグを生成するかどうかを決定します。デフォルト値はfalseです。

3.11.21 config.action_view.sanitizer_vendor

Action Viewで使用されるHTMLサニタイザのセットをActionView::Helpers::SanitizeHelper.sanitizer_vendorを設定することで構成します。デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値 マークアップの解析方法
(元のバージョン) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer(注:JRubyではサポートされていません) HTML5

注:JRubyではRails::HTML5::Sanitizerはサポートされていないため、JRubyプラットフォームではRails::HTML4::Sanitizerが使用されます。

3.12 Action Mailboxの設定

config.action_mailboxは以下の設定オプションを提供します。

3.12.1 config.action_mailbox.logger

Action Mailboxで使用されるロガーを含みます。Log4rのインターフェースに準拠するロガーまたはデフォルトのRuby Loggerクラスを受け入れます。デフォルトはRails.loggerです。

config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)

3.12.2 config.action_mailbox.incinerate_after

ActionMailbox::InboundEmailレコードの処理後に削除されるまでの期間を示すActiveSupport::Durationを受け入れます。デフォルトは30.daysです。

# 処理後14日で受信メールを削除する。
config.action_mailbox.incinerate_after = 14.days

3.12.3 config.action_mailbox.queues.incineration

インシネレーションジョブに使用するActive Jobキューを示すシンボルを受け入れます。このオプションがnilの場合、インシネレーションジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元のバージョン) :action_mailbox_incineration
6.1 nil

3.12.4 config.action_mailbox.queues.routing

ルーティングジョブに使用するActive Jobキューを示すシンボルを受け入れます。このオプションがnilの場合、ルーティングジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。 | バージョンから開始 | デフォルト値 | | --------------------- | -------------------- | | (元の値) | :action_mailbox_routing | | 6.1 | nil |

3.12.5 config.action_mailbox.storage_service

メールのアップロードに使用するActive Storageサービスを示すシンボルを受け入れます。このオプションがnilの場合、メールはデフォルトのActive Storageサービスにアップロードされます(config.active_storage.serviceを参照)。

3.13 Action Mailerの設定

config.action_mailerで利用可能な設定がいくつかあります:

3.13.1 config.action_mailer.asset_host

アセットのホストを設定します。アプリケーションサーバー自体ではなく、CDNがアセットをホストする場合に便利です。これはAction Controllerの設定と異なる場合にのみ使用する必要があります。そうでなければ、config.asset_hostを使用してください。

3.13.2 config.action_mailer.logger

Log4rのインターフェースに準拠するロガーまたはデフォルトのRuby Loggerクラスを受け入れます。これはAction Mailerからの情報をログに記録するために使用されます。ログを無効にするには、nilに設定します。

3.13.3 config.action_mailer.smtp_settings

:smtp配信方法の詳細な設定を許可します。オプションのハッシュを受け入れ、次のオプションのいずれかを含めることができます:

  • :address - リモートメールサーバーを使用することができます。デフォルトの「localhost」設定から変更してください。
  • :port - メールサーバーがポート25ではない場合に変更できます。
  • :domain - HELOドメインを指定する必要がある場合は、ここで指定できます。
  • :user_name - メールサーバーが認証を必要とする場合、この設定でユーザー名を設定します。
  • :password - メールサーバーが認証を必要とする場合、この設定でパスワードを設定します。
  • :authentication - メールサーバーが認証を必要とする場合、認証タイプをここで指定する必要があります。これはシンボルであり、:plain:login:cram_md5のいずれかです。
  • :enable_starttls - SMTPサーバーへの接続時にSTARTTLSを使用し、サポートされていない場合は失敗します。デフォルトはfalseです。
  • :enable_starttls_auto - SMTPサーバーでSTARTTLSが有効になっているかどうかを検出し、使用を開始します。デフォルトはtrueです。
  • :openssl_verify_mode - TLSを使用する場合、OpenSSLが証明書をどのようにチェックするかを設定できます。これは自己署名および/またはワイルドカード証明書を検証する必要がある場合に便利です。これはOpenSSLの検証定数、:noneまたは:peerのいずれか、またはそれぞれOpenSSL::SSL::VERIFY_NONEまたはOpenSSL::SSL::VERIFY_PEERの定数です。
  • :ssl/:tls - SMTP接続がSMTP/TLS(SMTPS:直接TLS接続上のSMTP)を使用するようにします。
  • :open_timeout - 接続を開こうとする間に待機する秒数です。
  • :read_timeout - read(2)呼び出しのタイムアウトまで待機する秒数です。 さらに、構成オプション Mail::SMTP が受け入れる 任意の設定オプションを渡すことができます。

3.13.4 config.action_mailer.smtp_timeout

:smtp 配信方法の :open_timeout:read_timeout の値を設定することができます。

デフォルト値は config.load_defaults のターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) nil
7.0 5

3.13.5 config.action_mailer.sendmail_settings

sendmail 配信方法の詳細な設定を行うことができます。オプションのハッシュを受け入れます。以下のオプションを含めることができます。

  • :location - sendmail 実行ファイルの場所。デフォルトは /usr/sbin/sendmail です。
  • :arguments - コマンドライン引数。デフォルトは %w[ -i ] です。

3.13.6 config.action_mailer.raise_delivery_errors

メールの配信が完了しない場合にエラーを発生させるかどうかを指定します。デフォルトは true です。

3.13.7 config.action_mailer.delivery_method

配信方法を定義し、デフォルトは :smtp です。詳細については、Action Mailer ガイドの構成セクション を参照してください。

3.13.8 config.action_mailer.perform_deliveries

メールが実際に配信されるかどうかを指定し、デフォルトは true です。テストのために false に設定すると便利です。

3.13.9 config.action_mailer.default_options

Action Mailer のデフォルトを設定します。fromreply_to のようなオプションをすべてのメーラーに対して設定するために使用します。デフォルトは以下のようになります。

mime_version:  "1.0",
charset:       "UTF-8",
content_type: "text/plain",
parts_order:  ["text/plain", "text/enriched", "text/html"]

ハッシュを割り当てて追加のオプションを設定することもできます。

config.action_mailer.default_options = {
  from: "[email protected]"
}

3.13.10 config.action_mailer.observers

メールが配信されたときに通知されるオブザーバーを登録します。

config.action_mailer.observers = ["MailObserver"]

3.13.11 config.action_mailer.interceptors

メールが送信される前に呼び出されるインターセプターを登録します。

config.action_mailer.interceptors = ["MailInterceptor"]

3.13.12 config.action_mailer.preview_interceptors

メールがプレビューされる前に呼び出されるインターセプターを登録します。

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]

3.13.13 config.action_mailer.preview_paths

メーラープレビューの場所を指定します。この設定オプションにパスを追加すると、それらのパスがメーラープレビューの検索に使用されます。

config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"

3.13.14 config.action_mailer.show_previews

メーラープレビューを有効または無効にします。デフォルトでは開発環境では true です。

config.action_mailer.show_previews = false

3.13.15 config.action_mailer.perform_caching

メーラーテンプレートがフラグメントキャッシュを実行するかどうかを指定します。指定されていない場合、デフォルトは true になります。

3.13.16 config.action_mailer.deliver_later_queue_name

デフォルトの配信ジョブに使用する Active Job キューを指定します(config.action_mailer.delivery_job を参照)。このオプションを nil に設定すると、配信ジョブはデフォルトの Active Job キューに送信されます(config.active_job.default_queue_name を参照)。

メーラークラスはこれをオーバーライドして異なるキューを使用することができます。ただし、これはデフォルトの配信ジョブを使用している場合にのみ適用されます。メーラーがカスタムジョブを使用している場合は、そのキューが使用されます。 指定されたキューを処理するようにActive Jobアダプターも設定されていることを確認してください。そうでない場合、配信ジョブは黙って無視される可能性があります。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値
(元の値) :mailers
6.1 nil

3.13.17 config.action_mailer.delivery_job

メールの配信ジョブを指定します。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値
(元の値) ActionMailer::MailDeliveryJob
6.0 "ActionMailer::MailDeliveryJob"

3.14 Active Supportの設定

Active Supportにはいくつかの設定オプションがあります。

3.14.1 config.active_support.bare

Railsの起動時にactive_support/allの読み込みを有効または無効にします。デフォルトはnilで、active_support/allが読み込まれます。

3.14.2 config.active_support.test_order

テストケースの実行順序を設定します。可能な値は:random:sortedです。デフォルトは:randomです。

3.14.3 config.active_support.escape_html_entities_in_json

JSONシリアル化時にHTMLエンティティのエスケープを有効または無効にします。デフォルトはtrueです。

3.14.4 config.active_support.use_standard_json_time_format

日付をISO 8601形式でシリアル化するかどうかを設定します。デフォルトはtrueです。

3.14.5 config.active_support.time_precision

JSONエンコードされた時間値の精度を設定します。デフォルトは3です。

3.14.6 config.active_support.hash_digest_class

ETagヘッダなどの非機密ダイジェストを生成するために使用するダイジェストクラスを設定できます。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値
(元の値) OpenSSL::Digest::MD5
5.2 OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

3.14.7 config.active_support.key_generator_hash_digest_class

設定されたシークレットベースからシークレットを派生させるために使用するダイジェストクラスを設定できます。これは、暗号化されたクッキーなどのためです。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値
(元の値) OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

3.14.8 config.active_support.use_authenticated_message_encryption

メッセージの暗号化にAES-256-CBCの代わりにAES-256-GCM認証付き暗号をデフォルトの暗号方式として使用するかどうかを指定します。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョンから開始 デフォルト値
(元の値) false
5.2 true

3.14.9 config.active_support.message_serializer

ActiveSupport::MessageEncryptorおよびActiveSupport::MessageVerifierインスタンスで使用されるデフォルトのシリアライザを指定します。シリアライザの移行を容易にするため、提供されるシリアライザには複数の逆シリアライズ形式をサポートするフォールバックメカニズムが含まれています。

シリアライザ シリアライズとデシリアライズ フォールバックのデシリアライズ
:marshal Marshal ActiveSupport::JSONActiveSupport::MessagePack
:json ActiveSupport::JSON ActiveSupport::MessagePack
:json_allow_marshal ActiveSupport::JSON ActiveSupport::MessagePackMarshal
:message_pack ActiveSupport::MessagePack ActiveSupport::JSON
:message_pack_allow_marshal ActiveSupport::MessagePack ActiveSupport::JSONMarshal

警告:Marshalは、メッセージ署名の秘密が漏洩した場合に、逆シリアル化攻撃の可能性があるベクトルです。可能であれば、Marshalをサポートしないシリアライザを選択してください。

情報::message_packおよび:message_pack_allow_marshalシリアライザは、SymbolなどのJSONでサポートされていない一部のRubyの型のラウンドトリップをサポートします。また、パフォーマンスの向上とペイロードサイズの縮小が可能です。ただし、msgpack gemが必要です。

上記の各シリアライザは、代替の逆シリアル化形式にフォールバックする際にmessage_serializer_fallback.active_supportイベント通知を出力します。これにより、そのようなフォールバックがどれくらい頻繁に発生するかを追跡できます。

また、dumpメソッドとloadメソッドに応答する任意のシリアライザオブジェクトを指定することもできます。例:

config.active_job.message_serializer = YAML

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) :marshal
7.1 :json_allow_marshal

3.14.10 config.active_support.use_message_serializer_for_metadata

trueの場合、メッセージデータとメタデータを一緒にシリアライズするパフォーマンス最適化が有効になります。これにより、メッセージの形式が変わるため、古い(<7.1)バージョンのRailsではこの方法でシリアライズされたメッセージを読むことはできません。ただし、古い形式を使用するメッセージは、この最適化が有効であるかどうかに関係なく読むことができます。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) false
7.1 true

3.14.11 config.active_support.cache_format_version

キャッシュに使用するシリアライズ形式を指定します。可能な値は6.17.07.1です。

6.17.07.1の形式はすべてデフォルトのコーダーとしてMarshalを使用しますが、7.0はキャッシュエントリの効率的な表現を使用し、7.1はビューフラグメントなどのベアストリング値に対する追加の最適化を含んでいます。

すべての形式は前方互換性と後方互換性があり、1つの形式で書かれたキャッシュエントリは、別の形式を使用して読むことができます。この動作により、キャッシュ全体を無効にすることなく形式間を移行することが容易になります。

デフォルト値は、config.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルト値
(元の値) 6.1
7.0 7.0
7.1 7.1

3.14.12 config.active_support.deprecation

非推奨の警告の動作を設定します。オプションは、:raise:stderr:log:notify:silenceです。

デフォルトの生成されたconfig/environmentsファイルでは、開発環境では:log、テスト環境では:stderrに設定され、本番環境ではconfig.active_support.report_deprecationsに優先します。

3.14.13 config.active_support.disallowed_deprecation

disallowed_deprecationの警告の振る舞いを設定します。オプションは:raise:stderr:log:notify:silenceです。

デフォルトで生成されるconfig/environmentsファイルでは、開発とテストの両方に対してraiseに設定され、本番ではconfig.active_support.report_deprecationsを優先するために省略されます。

3.14.14 config.active_support.disallowed_deprecation_warnings

アプリケーションが許容しない非推奨の警告を設定します。これにより、特定の非推奨を厳密なエラーとして扱うことができます。

3.14.15 config.active_support.report_deprecations

falseに設定すると、アプリケーションの非推奨機能からの非推奨警告をすべて無効にします。これにはRailsや他のジェムからの非推奨機能も含まれますが、ActiveSupport::Deprecationから発生するすべての非推奨警告を防ぐわけではありません。

デフォルトで生成されるconfig/environmentsファイルでは、本番ではfalseに設定されます。

3.14.16 config.active_support.isolation_level

Railsのほとんどの内部状態の局所性を設定します。ファイバーベースのサーバーやジョブプロセッサ(例:falcon)を使用している場合は、:fiberに設定する必要があります。それ以外の場合は、:threadの局所性を使用するのが最適です。デフォルトは:threadです。

3.14.17 config.active_support.executor_around_test_case

テストスイートがテストケースの周りでRails.application.executor.wrapを呼び出すように設定します。 これにより、テストケースは実際のリクエストやジョブに近い振る舞いをします。 通常テストでは無効になっているActive Recordクエリキャッシュや非同期クエリなどのいくつかの機能が有効になります。

デフォルトの値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルトの値
(元の値) false
7.0 true

3.14.18 ActiveSupport::Logger.silencer

ブロック内でのログの無効化機能を無効にするためにfalseに設定されます。デフォルトはtrueです。

3.14.19 ActiveSupport::Cache::Store.logger

キャッシュストアの操作で使用するロガーを指定します。

3.14.20 ActiveSupport.to_time_preserves_timezone

to_timeメソッドが受け取ったオブジェクトのUTCオフセットを保持するかどうかを指定します。falseの場合、to_timeメソッドはローカルシステムのUTCオフセットに変換されます。

デフォルトの値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルトの値
(元の値) false
5.0 true

3.14.21 ActiveSupport.utc_to_local_returns_utc_offset_times

ActiveSupport::TimeZone.utc_to_localがUTCの時間ではなくUTCオフセットを持つ時間を返すように設定します。

デフォルトの値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョン デフォルトの値
(元の値) false
6.1 true

3.14.22 config.active_support.raise_on_invalid_cache_expiration_time

Rails.cachefetchまたはwriteに無効なexpires_atまたはexpires_inの時間が指定された場合にArgumentErrorを発生させるかどうかを指定します。 オプションはtruefalseです。falseの場合、例外はhandledとして報告され、ログに記録されます。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョンから開始 デフォルト値
(元のバージョン) false
7.1 true

3.15 Active Jobの設定

config.active_jobは、次の設定オプションを提供します:

3.15.1 config.active_job.queue_adapter

キューのバックエンドに対するアダプタを設定します。デフォルトのアダプタは:asyncです。組み込みのアダプタの最新のリストについては、ActiveJob::QueueAdapters APIドキュメントを参照してください。

# アダプタのgemがGemfileに含まれていることを確認してください
# また、アダプタ固有のインストールおよび展開手順に従ってください。
config.active_job.queue_adapter = :sidekiq

3.15.2 config.active_job.default_queue_name

デフォルトのキュー名を変更するために使用できます。デフォルトでは、これは"default"です。

config.active_job.default_queue_name = :medium_priority

3.15.3 config.active_job.queue_name_prefix

すべてのジョブに対してオプションの空でないキュー名の接頭辞を設定することができます。デフォルトでは空で使用されません。

次の設定は、本番環境で実行される場合に、指定されたジョブをproduction_high_priorityキューにキューイングします:

config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
  queue_as :high_priority
  #....
end

3.15.4 config.active_job.queue_name_delimiter

デフォルト値は'_'です。queue_name_prefixが設定されている場合、queue_name_delimiterは接頭辞と接頭辞のないキュー名を結合します。

次の設定は、指定されたジョブをvideo_server.low_priorityキューにキューイングします:

# デリミタを使用するためには接頭辞を設定する必要があります
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end

3.15.5 config.active_job.logger

Log4rのインターフェースに準拠するロガーまたはデフォルトのRuby Loggerクラスを受け入れます。これはActive Jobからの情報をログに記録するために使用されます。Active JobクラスまたはActive Jobインスタンスのいずれかでloggerを呼び出すことでこのロガーを取得できます。ログを無効にするにはnilに設定します。

3.15.6 config.active_job.custom_serializers

カスタムの引数シリアライザを設定することができます。デフォルトは[]です。

3.15.7 config.active_job.log_arguments

ジョブの引数をログに記録するかどうかを制御します。デフォルトはtrueです。

3.15.8 config.active_job.verbose_enqueue_logs

バックグラウンドジョブをエンキューするメソッドのソース位置が関連するエンキューログ行の下に記録されるかどうかを指定します。デフォルトでは、開発環境ではフラグがtrueであり、他のすべての環境ではfalseです。

3.15.9 config.active_job.retry_jitter

失敗したジョブをリトライする際に計算される遅延時間に適用される「ジッター」(ランダムな変動)の量を制御します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します:

バージョンから開始 デフォルト値
(元のバージョン) 0.0
6.1 0.15

3.15.10 config.active_job.log_query_tags_around_perform

around_performを介して自動的にクエリタグのジョブコンテキストが更新されるかどうかを決定します。デフォルト値はtrueです。

3.15.11 config.active_job.use_big_decimal_serializer

BigDecimal引数のシリアライザを有効にします。このシリアライザを使用すると、いくつかのキューアダプタはBigDecimal引数を単純な(ラウンドトリップできない)文字列としてシリアライズすることがありません。

警告: 複数のレプリカを持つアプリケーションをデプロイする場合、古い(Rails 7.1以前の)レプリカはこのシリアライザからBigDecimal引数をデシリアライズすることができません。したがって、この設定は、すべてのレプリカが正常にRails 7.1にアップグレードされた後にのみ有効にする必要があります。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
7.1 true

3.16 Action Cableの設定

3.16.1 config.action_cable.url

Action CableサーバーをホストしているURLの文字列を受け入れます。メインのアプリケーションから分離されたAction Cableサーバーを実行している場合にこのオプションを使用します。

3.16.2 config.action_cable.mount_path

Action Cableをメインのサーバープロセスの一部としてマウントする場所の文字列を受け入れます。デフォルトは/cableです。通常のRailsサーバーにAction Cableをマウントしない場合は、これをnilに設定できます。

詳細な設定オプションについては、Action Cableの概要を参照してください。

3.16.3 config.action_cable.precompile_assets

Action Cableのアセットをアセットパイプラインのプリコンパイルに追加するかどうかを決定します。Sprocketsが使用されていない場合は効果がありません。デフォルト値はtrueです。

3.17 Active Storageの設定

config.active_storageは以下の設定オプションを提供します。

3.17.1 config.active_storage.variant_processor

MiniMagickまたはruby-vipsを使用してバリアントの変換とブロブの解析を実行するかどうかを指定する:mini_magickまたは:vipsのシンボルを受け入れます。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) :mini_magick
7.0 :vips

3.17.2 config.active_storage.analyzers

Active Storageブロブで使用可能な解析器を示すクラスの配列を受け入れます。デフォルトでは、次のように定義されています。

config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]

画像解析器は画像ブロブの幅と高さを抽出できます。ビデオ解析器はビデオブロブの幅、高さ、再生時間、角度、アスペクト比、ビデオ/オーディオチャンネルの有無を抽出できます。オーディオ解析器はオーディオブロブの再生時間とビットレートを抽出できます。

3.17.3 config.active_storage.previewers

Active Storageブロブで使用可能な画像プレビューアのクラスの配列を受け入れます。デフォルトでは、次のように定義されています。 ruby config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]

PopplerPDFPreviewerMuPDFPreviewerは、PDFのブロブの最初のページからサムネイルを生成することができます。VideoPreviewerはビデオのブロブから関連するフレームを生成します。

3.17.4 config.active_storage.paths

プレビューア/アナライザのコマンドの場所を示すオプションのハッシュを受け入れます。デフォルトは{}で、コマンドはデフォルトのパスで検索されます。次のオプションを含めることができます:

  • :ffprobe - ffprobeの実行可能ファイルの場所。
  • :mutool - mutoolの実行可能ファイルの場所。
  • :ffmpeg - ffmpegの実行可能ファイルの場所。
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'

3.17.5 config.active_storage.variable_content_types

Active Storageが変換できるコンテンツタイプを示す文字列の配列を受け入れます。デフォルトでは、次のように定義されています:

config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)

3.17.6 config.active_storage.web_image_content_types

フォールバックのPNG形式に変換せずに処理できるWebイメージコンテンツタイプとして扱われる文字列の配列を受け入れます。WebPAVIFのバリアントをアプリケーションで使用したい場合は、この配列にimage/webpまたはimage/avifを追加できます。デフォルトでは、次のように定義されています:

config.active_storage.web_image_content_types = %w(image/png image/jpeg image/gif)

3.17.7 config.active_storage.content_types_to_serve_as_binary

Active Storageが常にインラインではなく、添付ファイルとして提供するコンテンツタイプを示す文字列の配列を受け入れます。デフォルトでは、次のように定義されています:

config.active_storage.content_types_to_serve_as_binary = %w(text/html image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)

3.17.8 config.active_storage.content_types_allowed_inline

Active Storageがインラインで提供を許可するコンテンツタイプを示す文字列の配列を受け入れます。デフォルトでは、次のように定義されています:

config.active_storage.content_types_allowed_inline` = %w(image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)

3.17.9 config.active_storage.queues.analysis

解析ジョブに使用するActive Jobキューを示すシンボルを受け入れます。このオプションがnilの場合、解析ジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります:

バージョン デフォルト値
6.0 :active_storage_analysis
6.1 nil

3.17.10 config.active_storage.queues.purge

パージジョブに使用するActive Jobキューを示すシンボルを受け入れます。このオプションがnilの場合、パージジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。

デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります:

バージョン デフォルト値
6.0 :active_storage_purge
6.1 nil

3.17.11 config.active_storage.queues.mirror

config.active_storage.queues.mirrorは、直接アップロードのミラーリングジョブに使用するActive Jobキューを示すシンボルを受け入れます。このオプションがnilの場合、ミラーリングジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルトはnilです。

3.17.12 config.active_storage.logger

Active Storageが使用するロガーを設定するために使用できます。Log4rのインターフェースに準拠するロガーまたはデフォルトのRuby Loggerクラスを受け入れます。

config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)

3.17.13 config.active_storage.service_urls_expire_in

次のURLのデフォルトの有効期限を決定します。

  • ActiveStorage::Blob#url
  • ActiveStorage::Blob#service_url_for_direct_upload
  • ActiveStorage::Variant#url

デフォルトは5分です。

3.17.14 config.active_storage.urls_expire_in

Active Storageによって生成されるRailsアプリケーションのURLのデフォルトの有効期限を決定します。デフォルトはnilです。

3.17.15 config.active_storage.routes_prefix

Active Storageが提供するルートのルートプレフィックスを設定するために使用できます。生成されるルートの前に追加される文字列を受け入れます。

config.active_storage.routes_prefix = '/files'

デフォルトは/rails/active_storageです。

3.17.16 config.active_storage.track_variants

バリアントがデータベースに記録されるかどうかを決定します。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
6.1 true

3.17.17 config.active_storage.draw_routes

Active Storageのルート生成を切り替えるために使用できます。デフォルトはtrueです。

3.17.18 config.active_storage.resolve_model_to_route

Active Storageファイルの配信方法をグローバルに変更するために使用できます。

許可される値は次のとおりです。

  • :rails_storage_redirect:署名付きの短期間のサービスURLにリダイレクトします。
  • :rails_storage_proxy:ファイルをダウンロードしてプロキシします。

デフォルトは:rails_storage_redirectです。

3.17.19 config.active_storage.video_preview_arguments

ffmpegがビデオプレビュー画像を生成する方法を変更するために使用できます。

デフォルト値はconfig.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) "-y -vframes 1 -f image2"
7.0 "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)"1
+ ",loop=loop=-1:size=2,trim=start_frame=1'"2
+ " -frames:v 1 -f image2"

  1. 最初のビデオフレーム、キーフレーム、シーン変更の閾値を満たすフレームを選択します。
  2. 他のフレームが基準を満たさない場合にフォールバックとして最初のビデオフレームを使用し、最初の(1つまたは)2つの選択されたフレームをループし、最初のループフレームを削除します。

3.17.20 config.active_storage.multiple_file_field_include_hidden

Rails 7.1以降、Active Storageのhas_many_attached関連は、現在のコレクションを追加するのではなく、置換するようにデフォルトで設定されます。したがって、空のコレクションを送信するために、multiple_file_field_include_hiddentrueの場合、file_fieldヘルパーは、check_boxヘルパーと同様に補助的な隠しフィールドをレンダリングします。 デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値
(元の値) false
7.0 true

3.17.21 config.active_storage.precompile_assets

Active Storageのアセットをアセットパイプラインの事前コンパイルに追加するかどうかを決定します。Sprocketsが使用されていない場合は、効果はありません。デフォルト値はtrueです。

3.18 Action Textの設定

3.18.1 config.action_text.attachment_tag_name

添付ファイルを囲むために使用されるHTMLタグの文字列を受け入れます。デフォルト値は"action-text-attachment"です。

3.18.2 config.action_text.sanitizer_vendor

Action Textが使用するHTMLサニタイザを設定するために、ActionText::ContentHelper.sanitizerをベンダーの.safe_list_sanitizerメソッドから返されるクラスのインスタンスに設定します。デフォルト値は、config.load_defaultsのターゲットバージョンに依存します。

バージョン デフォルト値 マークアップの解析方法
(元の値) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer(注を参照) HTML5

注:Rails::HTML5::SanitizerはJRubyではサポートされていないため、JRubyプラットフォームではRailsはRails::HTML4::Sanitizerを使用するようにフォールバックします。

3.19 データベースの設定

ほとんどのRailsアプリケーションはデータベースとやり取りします。データベースに接続するには、環境変数ENV['DATABASE_URL']を設定するか、config/database.ymlという設定ファイルを使用することができます。

config/database.ymlファイルを使用すると、データベースにアクセスするために必要なすべての情報を指定できます。

development:
  adapter: postgresql
  database: blog_development
  pool: 5

これは、postgresqlアダプタを使用してblog_developmentという名前のデータベースに接続します。同じ情報をURLとして保存し、次のように環境変数を介して提供することもできます。

ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"

config/database.ymlファイルには、Railsがデフォルトで実行できる3つの異なる環境用のセクションが含まれています。

  • development環境は、アプリケーションと手動で対話するために開発/ローカルコンピュータで使用されます。
  • test環境は、自動化されたテストを実行するときに使用されます。
  • production環境は、アプリケーションを世界に展開するときに使用されます。

必要に応じて、config/database.yml内にURLを手動で指定することもできます。

development:
  url: postgresql://localhost/blog_development?pool=5

config/database.ymlファイルにはERBタグ<%= %>を含めることができます。タグ内のすべてはRubyコードとして評価されます。これを使用して環境変数からデータを取り出したり、必要な接続情報を生成するために計算を実行したりすることができます。

データベースの設定を手動で更新する必要はありません。アプリケーションジェネレータのオプションを確認すると、--databaseというオプションがあることがわかります。このオプションを使用すると、最も一般的に使用されるリレーショナルデータベースのリストからアダプタを選択できます。ジェネレータを繰り返し実行することもできます。cd .. && rails new blog --database=mysqlと入力すると、config/database.ymlファイルの上書きを確認すると、アプリケーションはSQLiteではなくMySQL用に設定されます。一般的なデータベース接続の詳細な例は以下に示します。

3.20 接続設定の優先順位

接続を設定する方法は2つあります(config/database.ymlを使用するか、環境変数を使用するか)。これらがどのように相互作用するかを理解することが重要です。

config/database.ymlファイルが空であるが、ENV['DATABASE_URL']が存在する場合、Railsは環境変数を介してデータベースに接続します。

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

config/database.ymlが存在するが、ENV['DATABASE_URL']が存在しない場合、このファイルがデータベースに接続するために使用されます。

$ cat config/database.yml
development:
  adapter: postgresql
  database: my_database
  host: localhost

$ echo $DATABASE_URL

config/database.ymlENV['DATABASE_URL']の両方が設定されている場合、Railsは設定を結合します。これをより良く理解するために、いくつかの例を見てみましょう。

重複する接続情報が提供された場合、環境変数が優先されます。

$ cat config/database.yml
development:
  adapter: sqlite3
  database: NOT_my_database
  host: localhost

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
    @url="postgresql://localhost/my_database">
  ]

ここでは、アダプター、ホスト、データベースがENV['DATABASE_URL']の情報と一致しています。

重複しない情報が提供されると、すべての一意の値が取得されますが、競合がある場合は環境変数が優先されます。

$ cat config/database.yml
development:
  adapter: sqlite3
  pool: 5

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
    @url="postgresql://localhost/my_database">
  ]

poolENV['DATABASE_URL']の提供された接続情報に含まれていないため、その情報がマージされます。adapterは重複しているため、ENV['DATABASE_URL']の接続情報が優先されます。

ENV['DATABASE_URL']の接続情報を使用しない明示的なURL接続を指定するには、"url"サブキーを使用する方法しかありません。

$ cat config/database.yml
development:
  url: sqlite3:NOT_my_database

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
    @url="sqlite3:NOT_my_database">
  ]

ここでは、ENV['DATABASE_URL']の接続情報は無視され、アダプターとデータベース名が異なることに注意してください。

config/database.ymlにERBを埋め込むことができるため、データベースに接続するためにENV['DATABASE_URL']を使用していることを明示的に示すことがベストプラクティスです。特に、データベースのパスワードなどの機密情報をソースコントロール(Gitなど)にコミットしないようにするため、これは本番環境で特に便利です。

$ cat config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>

これで、ENV['DATABASE_URL']の接続情報のみを使用していることが明確になりました。

3.20.1 SQLite3データベースの設定

Railsには、軽量なサーバーレスのデータベースアプリケーションであるSQLite3の組み込みサポートが付属しています。繁忙な本番環境ではSQLiteが過負荷になる可能性がありますが、開発やテストには適しています。新しいプロジェクトを作成する際、RailsはデフォルトでSQLiteデータベースを使用しますが、後で変更することもできます。

以下は、開発環境の接続情報を含むデフォルトの設定ファイル(config/database.yml)のセクションです。

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

注意:RailsはデータストレージにデフォルトでSQLite3データベースを使用するため、設定なしで使用できます。Railsはまた、MySQL(MariaDBを含む)やPostgreSQLを「そのまま」サポートしており、多くのデータベースシステム用のプラグインも提供しています。本番環境でデータベースを使用している場合、Railsにはおそらくそれに対応するアダプタがあります。

3.20.2 MySQLまたはMariaDBデータベースの設定

組み込みのSQLite3データベースの代わりにMySQLまたはMariaDBを使用する場合、config/database.ymlは少し異なる見た目になります。以下は開発セクションの例です。

development:
  adapter: mysql2
  encoding: utf8mb4
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

開発用のデータベースにrootユーザーと空のパスワードがある場合、この設定が適用されるはずです。それ以外の場合は、developmentセクションのユーザー名とパスワードを適切に変更してください。

注意:MySQLのバージョンが5.5または5.6で、デフォルトでutf8mb4文字セットを使用したい場合は、innodb_large_prefixシステム変数を有効にして、より長いキープレフィックスをサポートするようにMySQLサーバーを設定してください。

アドバイザリーロックはMySQLではデフォルトで有効になっており、データベースマイグレーションを同時に安全に行うために使用されます。advisory_locksfalseに設定することで、アドバイザリーロックを無効にすることができます。

production:
  adapter: mysql2
  advisory_locks: false

3.20.3 PostgreSQLデータベースの設定

PostgreSQLを使用する場合、config/database.ymlはPostgreSQLデータベースを使用するようにカスタマイズされます。

development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5

デフォルトでは、Active Recordはプリペアドステートメントやアドバイザリーロックなどのデータベース機能を使用します。PgBouncerのような外部の接続プーラーを使用している場合、これらの機能を無効にする必要があるかもしれません。

production:
  adapter: postgresql
  prepared_statements: false
  advisory_locks: false

有効になっている場合、Active Recordはデフォルトで1つのデータベース接続あたり最大で1000個のプリペアドステートメントを作成します。この動作を変更するには、statement_limitを別の値に設定できます。

production:
  adapter: postgresql
  statement_limit: 200

使用されるプリペアドステートメントが多いほど、データベースが必要とするメモリも増えます。PostgreSQLデータベースがメモリ制限に達している場合は、statement_limitを下げるか、プリペアドステートメントを無効にしてみてください。

3.20.4 JRubyプラットフォーム用にSQLite3データベースを設定する

SQLite3を使用し、JRubyを使用する場合、config/database.ymlは少し異なる見た目になります。以下は開発セクションの例です。

development:
  adapter: jdbcsqlite3
  database: storage/development.sqlite3

3.20.5 JRubyプラットフォーム用にMySQLまたはMariaDBデータベースを設定する

MySQLまたはMariaDBを使用し、JRubyを使用する場合、config/database.ymlは少し異なる見た目になります。以下は開発セクションの例です。

development:
  adapter: jdbcmysql
  database: blog_development
  username: root
  password:

3.20.6 JRubyプラットフォーム用にPostgreSQLデータベースを設定する

PostgreSQLを使用し、JRubyを使用する場合、config/database.ymlは少し異なる見た目になります。以下は開発セクションの例です。

development:
  adapter: jdbcpostgresql
  encoding: unicode
  database: blog_development
  username: blog
  password:

必要に応じてdevelopmentセクションのユーザー名とパスワードを変更してください。

3.20.7 メタデータストレージの設定

デフォルトでは、RailsはRails環境とスキーマに関する情報をar_internal_metadataという内部テーブルに保存します。

接続ごとにこれを無効にするには、データベースの設定でuse_metadata_tableを設定します。これは、テーブルを作成できない共有データベースやデータベースユーザーで作業する場合に便利です。

development:
  adapter: postgresql
  use_metadata_table: false

3.20.8 リトライ動作の設定

デフォルトでは、Railsは何か問題が発生した場合に自動的にデータベースサーバーに再接続し、特定のクエリをリトライします。安全にリトライできる(冪等性のある)クエリのみがリトライされます。リトライの回数はデータベースの設定でconnection_retriesを指定するか、値を0に設定することで無効にすることができます。デフォルトのリトライ回数は1です。

development:
  adapter: mysql2
  connection_retries: 3

データベースの設定では、retry_deadlineも設定できます。retry_deadlineが設定されている場合、リトライ可能なクエリは、最初の試行時に指定された時間が経過した場合にはリトライされません。たとえば、retry_deadlineが5秒の場合、クエリの最初の試行から5秒が経過した場合、クエリはリトライされません。冪等性があり、connection_retriesが残っていても、クエリはリトライされません。

この値はデフォルトでnilになっており、経過時間に関係なくすべてのリトライ可能なクエリがリトライされます。この設定の値は秒単位で指定する必要があります。

development:
  adapter: mysql2
  retry_deadline: 5 # 5秒後にクエリのリトライを停止する

3.20.9 クエリキャッシュの設定

デフォルトでは、Railsはクエリの結果セットを自動的にキャッシュします。同じクエリがリクエストまたはジョブのために再度発生した場合、データベースに再度クエリを実行する代わりに、キャッシュされた結果セットを使用します。 クエリキャッシュはメモリに格納され、メモリを過剰に使用しないようにするため、しきい値に達すると最も最近使用されていないクエリを自動的に削除します。デフォルトではしきい値は 100 ですが、database.yml で設定することができます。

development:
  adapter: mysql2
  query_cache: 200

クエリキャッシュを完全に無効にするには、false に設定することができます。

development:
  adapter: mysql2
  query_cache: false

3.21 Railsの環境の作成

デフォルトでは、Railsには「development」、「test」、「production」という3つの環境が付属しています。これらはほとんどのユースケースには十分ですが、より多くの環境が必要な場合もあります。

例えば、本番環境と同様のサーバーでテストに使用するサーバーがあるとします。このようなサーバーは一般的に「ステージングサーバー」と呼ばれます。このサーバーのために「staging」という環境を定義するには、単にconfig/environments/staging.rbというファイルを作成します。これは本番環境のような環境なので、config/environments/production.rbの内容をコピーして開始点とし、そこから必要な変更を行います。また、次のように他の環境設定を要求して拡張することも可能です。

# config/environments/staging.rb
require_relative "production"

Rails.application.configure do
  # ステージングのオーバーライド
end

この環境はデフォルトの環境と変わりありません。bin/rails server -e stagingでサーバーを起動し、bin/rails console -e stagingでコンソールを起動し、Rails.env.staging?が機能します。

3.22 サブディレクトリへのデプロイ(相対URLルート)

デフォルトでは、Railsはアプリケーションがルート(例:/)で実行されていることを想定しています。このセクションでは、ディレクトリ内でアプリケーションを実行する方法について説明します。

例えば、アプリケーションを "/app1" にデプロイしたいとします。Railsは適切なルートを生成するためにこのディレクトリを知る必要があります。

config.relative_url_root = "/app1"

または、RAILS_RELATIVE_URL_ROOT 環境変数を設定することもできます。

Railsはリンクを生成する際に "/app1" を先頭に追加します。

3.22.1 Passengerの使用

Passengerを使用すると、サブディレクトリでアプリケーションを実行することが簡単になります。詳細な設定については、Passengerのマニュアルを参照してください。

3.22.2 リバースプロキシの使用

リバースプロキシを使用してアプリケーションをデプロイすると、従来のデプロイよりも明確な利点があります。これにより、アプリケーションに必要なコンポーネントをレイヤー化することで、サーバーをより制御できるようになります。

多くの現代のWebサーバーは、キャッシュサーバーやアプリケーションサーバーなどのサードパーティの要素をバランスするためにプロキシサーバーとして使用することができます。

そのようなアプリケーションサーバーの1つとして、Unicornをリバースプロキシの背後で実行することができます。

この場合、プロキシサーバー(NGINX、Apacheなど)を設定して、アプリケーションサーバー(Unicorn)からの接続を受け入れる必要があります。デフォルトでは、Unicornはポート8080でTCP接続を待ち受けますが、ポートを変更したり、ソケットを使用するように設定することもできます。 詳細な情報は、Unicorn readmeを参照し、それに関連する哲学を理解してください。

アプリケーションサーバーを設定した後、ウェブサーバーを適切に設定してリクエストをプロキシする必要があります。たとえば、NGINXの設定には次のようなものが含まれる場合があります。

upstream application_server {
  server 0.0.0.0:8080;
}

server {
  listen 80;
  server_name localhost;

  root /root/path/to/your_app/public;

  try_files $uri/index.html $uri.html @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://application_server;
  }

  # some other configuration
}

最新の情報については、NGINXのドキュメントを参照してください。

4 Railsの環境設定

Railsの一部は環境変数を指定することで外部から設定することもできます。以下の環境変数は、Railsのさまざまな部分で認識されます。

  • ENV["RAILS_ENV"]は、Railsが実行されるRailsの環境(production、development、testなど)を定義します。

  • ENV["RAILS_RELATIVE_URL_ROOT"]は、アプリケーションをサブディレクトリにデプロイする際に、ルーティングコードがURLを認識するために使用されます。

  • ENV["RAILS_CACHE_ID"]ENV["RAILS_APP_VERSION"]は、Railsのキャッシュコードで拡張キャッシュキーを生成するために使用されます。これにより、同じアプリケーションから複数の別々のキャッシュを持つことができます。

5 イニシャライザファイルの使用

フレームワークとアプリケーション内のgemをロードした後、Railsはイニシャライザのロードに移ります。イニシャライザは、アプリケーションのconfig/initializersディレクトリに格納された任意のRubyファイルです。イニシャライザを使用して、フレームワークやgemのロード後に行う必要のある設定を保持することができます。

config/initializersディレクトリ(およびconfig/initializersのサブディレクトリ)のファイルは、load_config_initializersイニシャライザの一部として1つずつ順番にソートされてロードされます。

イニシャライザには、他のイニシャライザのコードに依存するコードがある場合、それらを1つのイニシャライザに組み合わせることもできます。これにより、依存関係が明示的になり、アプリケーション内の新しい概念が浮かび上がるのに役立ちます。Railsはイニシャライザファイル名の番号付けもサポートしていますが、ファイル名の変更が頻繁に発生する可能性があります。requireを使用してイニシャライザを明示的にロードすることは推奨されません。なぜなら、イニシャライザが2回ロードされるためです。

注意:イニシャライザがすべてのgemのイニシャライザの後に実行されることは保証されていませんので、特定のgemが初期化された後に依存する初期化コードは、config.after_initializeブロックに配置する必要があります。

6 初期化イベント

Railsには、フックできる初期化イベントが5つあります(実行される順にリストアップされています):

  • before_configuration:このイベントは、アプリケーション定数がRails::Applicationを継承するとすぐに実行されます。configの呼び出しは、これが行われる前に評価されます。
  • before_initialize: これは、Railsの初期化プロセスの開始時点で、:bootstrap_hookイニシャライザの直前に直接実行されます。

  • to_prepare: すべてのRailties(アプリケーション自体を含む)のイニシャライザが実行された後、イーガーローディングとミドルウェアスタックの構築の前に実行されます。重要なのは、developmentではコードの再読み込みごとに実行されますが、productiontestでは起動時に1回だけ実行されます。

  • before_eager_load: これは、イーガーローディングが実行される直前に実行されます。これはproduction環境のデフォルトの動作であり、development環境では実行されません。

  • after_initialize: アプリケーションの初期化直後に実行されます。config/initializers内のアプリケーションイニシャライザが実行された後に実行されます。

これらのフックのイベントを定義するには、Rails::ApplicationRails::Railtie、またはRails::Engineのサブクラス内でブロック構文を使用します。

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # 初期化コードをここに記述します
    end
  end
end

または、Rails.applicationオブジェクトのconfigメソッドを使用して行うこともできます。

Rails.application.config.before_initialize do
  # 初期化コードをここに記述します
end

警告: after_initializeブロックが呼び出される時点では、ルーティングなどのアプリケーションの一部がまだ設定されていません。

6.1 Rails::Railtie#initializer

Railsには、起動時に実行されるいくつかのイニシャライザがあり、これらはすべてRails::Railtieinitializerメソッドを使用して定義されます。以下は、Action Controllerのset_helpers_pathイニシャライザの例です。

initializer "action_controller.set_helpers_path" do |app|
  ActionController::Helpers.helpers_path = app.helpers_paths
end

initializerメソッドは3つの引数を取ります。最初の引数はイニシャライザの名前で、2番目の引数はオプションのハッシュ(ここでは省略しています)、3番目の引数はブロックです。オプションハッシュのbeforeキーを指定することで、新しいイニシャライザがどのイニシャライザよりも前に実行されるかを指定することができます。また、afterキーを使用して、このイニシャライザがどのイニシャライザの後に実行されるかを指定することもできます。

initializerメソッドで定義されたイニシャライザは、定義された順に実行されますが、beforeまたはafterメソッドを使用するイニシャライザを除いては、実行順序は保証されません。

警告: イニシャライザをチェーン内の他のイニシャライザの前後に配置することは、論理的である限り可能です。たとえば、"one"から"four"までの4つのイニシャライザがあるとします(この順序で定義されています)。そして、"four"を"two"の前に、"three"の後に配置するというのは論理的ではないため、Railsはイニシャライザの順序を決定できません。

initializerメソッドのブロック引数はアプリケーション自体のインスタンスであり、例のようにconfigメソッドを使用してその設定にアクセスすることができます。 Rails::ApplicationRails::Railtieを継承しているため、config/application.rb内のinitializerメソッドを使用してアプリケーションの初期化子を定義することができます。

6.2 初期化子

以下は、Railsで定義されているすべての初期化子の包括的なリストです(それに従って実行される順序で表示されます)。

  • load_environment_hook:load_environment_configがそれより前に実行されるように定義できるようにするためのプレースホルダーとして機能します。

  • load_active_support:Active Supportの基盤を設定するactive_support/dependenciesを要求します。config.active_support.bareが真でない場合(デフォルト)、active_support/allをオプションで要求します。

  • initialize_logger:アプリケーションのロガー(ActiveSupport::Loggerオブジェクト)を初期化し、Rails.loggerでアクセスできるようにします。ただし、このポイントより前に挿入された初期化子でRails.loggerが定義されていない場合に限ります。

  • initialize_cacheRails.cacheがまだ設定されていない場合、config.cache_storeの値を参照してキャッシュを初期化し、結果をRails.cacheとして保存します。このオブジェクトがmiddlewareメソッドに応答する場合、そのミドルウェアはミドルウェアスタックのRack::Runtimeの前に挿入されます。

  • set_clear_dependencies_hook:この初期化子は、config.enable_reloadingtrueに設定されている場合にのみ実行され、リクエスト中に参照された定数をオブジェクトスペースから削除し、次のリクエストで再読み込みされるようにするためにActionDispatch::Callbacks.afterを使用します。

  • bootstrap_hook:設定されたすべてのbefore_initializeブロックを実行します。

  • i18n.callbacks:開発環境では、最後のリクエスト以降にロケールが変更された場合にI18n.reload!を呼び出すto_prepareコールバックを設定します。本番環境では、このコールバックは最初のリクエスト時にのみ実行されます。

  • active_support.deprecation_behaviorconfig.active_support.report_deprecationsconfig.active_support.deprecationconfig.active_support.disallowed_deprecationconfig.active_support.disallowed_deprecation_warningsに基づいてRails.application.deprecatorsの非推奨報告動作を設定します。

  • active_support.initialize_time_zoneconfig.time_zone設定に基づいてアプリケーションのデフォルトタイムゾーンを設定します。デフォルトは「UTC」です。

  • active_support.initialize_beginning_of_weekconfig.beginning_of_week設定に基づいてアプリケーションのデフォルト週の開始日を設定します。デフォルトは:mondayです。

  • active_support.set_configsconfig.active_supportの設定を使用してActive Supportを設定します。メソッド名をActiveSupportのセッターとしてsendし、値を渡します。

  • action_dispatch.configureconfig.action_dispatch.tld_lengthの値をActionDispatch::Http::URL.tld_lengthに設定します。

  • action_view.set_configsconfig.action_viewの設定を使用してAction Viewを設定します。メソッド名をActionView::Baseのセッターとしてsendし、値を渡します。

  • action_controller.assets_config:明示的に設定されていない場合、config.action_controller.assets_dirをアプリケーションのパブリックディレクトリに初期化します。

  • action_controller.set_helpers_path:Action Controllerのhelpers_pathをアプリケーションのhelpers_pathに設定します。

  • action_controller.parameters_configActionController::Parametersの強力なパラメータオプションを設定します。

  • action_controller.set_configsconfig.action_controllerの設定を使用してAction Controllerを設定します。メソッド名をActionController::Baseのセッターとしてsendし、値を渡します。

  • action_controller.compile_config_methods: 指定された設定のメソッドを初期化し、アクセスが高速化されるようにします。

  • active_record.initialize_timezone: ActiveRecord::Base.time_zone_aware_attributestrueに設定し、ActiveRecord::Base.default_timezoneをUTCに設定します。データベースから属性が読み取られる際には、Time.zoneで指定されたタイムゾーンに変換されます。

  • active_record.logger: ActiveRecord::Base.loggerを設定します。既に設定されていない場合は、Rails.loggerを使用します。

  • active_record.migration_error: 未実行のマイグレーションをチェックするためのミドルウェアを設定します。

  • active_record.check_schema_cache_dump: 設定されている場合、スキーマキャッシュダンプをロードします。

  • active_record.warn_on_records_fetched_greater_than: クエリが大量のレコードを返す場合に警告を有効にします。

  • active_record.set_configs: config.active_recordの設定を使用してActive Recordをセットアップします。メソッド名をsendしてActiveRecord::Baseのセッターとして使用し、値を渡します。

  • active_record.initialize_database: データベースの設定(デフォルトではconfig/database.ymlから)をロードし、現在の環境に接続を確立します。

  • active_record.log_runtime: ActiveRecord::Railties::ControllerRuntimeActiveRecord::Railties::JobRuntimeを含み、リクエストのためのActive Record呼び出しにかかった時間をロガーに報告する役割を担います。

  • active_record.set_reloader_hooks: config.enable_reloadingtrueに設定されている場合、リロード可能なすべてのデータベース接続をリセットします。

  • active_record.add_watchable_files: schema.rbstructure.sqlファイルを監視対象ファイルに追加します。

  • active_job.logger: ActiveJob::Base.loggerを設定します。既に設定されていない場合は、Rails.loggerを使用します。

  • active_job.set_configs: config.active_jobの設定を使用してActive Jobをセットアップします。メソッド名をsendしてActiveJob::Baseのセッターとして使用し、値を渡します。

  • action_mailer.logger: ActionMailer::Base.loggerを設定します。既に設定されていない場合は、Rails.loggerを使用します。

  • action_mailer.set_configs: config.action_mailerの設定を使用してAction Mailerをセットアップします。メソッド名をsendしてActionMailer::Baseのセッターとして使用し、値を渡します。

  • action_mailer.compile_config_methods: 指定された設定のメソッドを初期化し、アクセスが高速化されるようにします。

  • set_load_path: この初期化子はbootstrap_hookの前に実行されます。config.load_pathsで指定されたパスとすべての自動読み込みパスを$LOAD_PATHに追加します。

  • set_autoload_paths: この初期化子はbootstrap_hookの前に実行されます。appのすべてのサブディレクトリとconfig.autoload_pathsconfig.eager_load_pathsconfig.autoload_once_pathsで指定されたパスをActiveSupport::Dependencies.autoload_pathsに追加します。

  • add_routing_paths: アプリケーションとレイルティ、エンジンを含むすべてのconfig/routes.rbファイルを(デフォルトで)ロードし、アプリケーションのルートを設定します。

  • add_locales: アプリケーション、レイルティ、エンジンのconfig/localesにあるファイルをI18n.load_pathに追加し、これらのファイルの翻訳を利用できるようにします。

  • add_view_paths: アプリケーション、レイルティ、エンジンのapp/viewsディレクトリをビューファイルの検索パスに追加します。

  • add_mailer_preview_paths: アプリケーション、レイルティ、エンジンのtest/mailers/previewsディレクトリをメーラープレビューファイルの検索パスに追加します。

  • load_environment_config: このイニシャライザはload_environment_hookの前に実行されます。現在の環境のconfig/environmentsファイルを読み込みます。

  • prepend_helpers_path: アプリケーション、railties、エンジンからapp/helpersディレクトリをヘルパーの検索パスに追加します。

  • load_config_initializers: アプリケーション、railties、エンジンからconfig/initializersのすべてのRubyファイルを読み込みます。このディレクトリのファイルは、すべてのフレームワークが読み込まれた後に行われるべき設定を保持するために使用されます。

  • engines_blank_point: エンジンがロードされる前に何かを行いたい場合にフックするための初期化ポイントを提供します。このポイント以降、すべてのrailtieおよびエンジンのイニシャライザが実行されます。

  • add_generator_templates: アプリケーション、railties、エンジンのlib/templatesでジェネレータのテンプレートを検索し、これらをconfig.generators.templates設定に追加します。これにより、すべてのジェネレータが参照できるようになります。

  • ensure_autoload_once_paths_as_subset: config.autoload_once_pathsconfig.autoload_pathsのパスのみを含むようにします。余分なパスが含まれている場合は例外が発生します。

  • add_to_prepare_blocks: アプリケーション、railtie、またはエンジンのすべてのconfig.to_prepare呼び出しのブロックは、開発時にリクエストごとに実行されるか、本番環境で最初のリクエストの前に実行されるAction Dispatchのto_prepareコールバックに追加されます。

  • add_builtin_route: アプリケーションが開発環境で実行されている場合、これによりrails/info/propertiesのルートがアプリケーションのルートに追加されます。このルートは、デフォルトのRailsアプリケーションのpublic/index.htmlにRailsおよびRubyのバージョンなどの詳細情報を提供します。

  • build_middleware_stack: アプリケーションのミドルウェアスタックを構築し、リクエストのためのRack環境オブジェクトを受け取るcallメソッドを持つオブジェクトを返します。

  • eager_load!: config.eager_loadtrueの場合、config.before_eager_loadフックを実行し、すべてのconfig.eager_load_namespacesをロードするeager_load!を呼び出します。

  • finisher_hook: アプリケーションの初期化プロセスが完了した後のフックを提供し、アプリケーション、railties、エンジンのすべてのconfig.after_initializeブロックを実行します。

  • set_routes_reloader_hook: Action Dispatchを設定して、ActiveSupport::Callbacks.to_runを使用してルートファイルをリロードします。

  • disable_dependency_loading: config.eager_loadtrueに設定されている場合、自動的な依存関係のロードを無効にします。

7 データベースプーリング

Active Recordのデータベース接続は、ActiveRecord::ConnectionAdapters::ConnectionPoolによって管理されます。これにより、データベース接続のスレッドアクセスの数を制限するための接続プールが同期されます。この制限はデフォルトで5に設定されており、database.ymlで設定することができます。

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

接続プーリングはデフォルトでActive Record内部で処理されるため、すべてのアプリケーションサーバー(Thin、Puma、Unicornなど)は同じように動作するはずです。データベース接続プールは最初は空です。接続の需要が増えると、接続プールの制限に達するまで接続を作成します。 任意のリクエストは、データベースへのアクセスが必要な場合は最初に接続を確認します。リクエストの最後には、接続をチェックアウトします。これにより、追加の接続スロットはキュー内の次のリクエストに再度利用可能になります。

利用可能な接続数を超えて接続を使用しようとすると、Active Recordはブロックされ、プールからの接続を待機します。接続を取得できない場合、以下のようなタイムアウトエラーがスローされます。

ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)

上記のエラーが発生した場合は、database.ymlpoolオプションを増やすことで接続プールのサイズを増やすことを検討する必要があります。

注意:マルチスレッド環境で実行している場合、複数のスレッドが同時に複数の接続にアクセスする可能性があります。したがって、現在のリクエストの負荷に応じて、限られた数の接続を競合する複数のスレッドを持つことがあります。

8 カスタム設定

Railsの設定オブジェクトを使用して、独自のコードを設定することができます。独自の設定は、config.x名前空間または直接configの下に配置することができます。これら2つの違いは、ネストされた設定(例:config.x.nested.hi)を定義している場合はconfig.xを使用し、単一レベルの設定(例:config.hello)にはconfigを使用する必要があるということです。

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3
config.super_debugger = true

これらの設定ポイントは、設定オブジェクトを介して利用できます。

Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries  # => 3
Rails.configuration.x.payment_processing.not_set  # => nil
Rails.configuration.super_debugger                # => true

また、Rails::Application.config_forを使用して設定ファイル全体をロードすることもできます。

# config/payment.yml
production:
  environment: production
  merchant_id: production_merchant_id
  public_key:  production_public_key
  private_key: production_private_key

development:
  environment: sandbox
  merchant_id: development_merchant_id
  public_key:  development_public_key
  private_key: development_private_key
# config/application.rb
module MyApp
  class Application < Rails::Application
    config.payment = config_for(:payment)
  end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_idまたはdevelopment_merchant_id

Rails::Application.config_forは、共有設定を使用して共通の設定をグループ化することもサポートしています。共有設定は環境設定にマージされます。

# config/example.yml
shared:
  foo:
    bar:
      baz: 1

development:
  foo:
    bar:
      qux: 2
# development environment
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }

9 検索エンジンのインデックス作成

時には、Google、Bing、Yahoo、Duck Duck Goなどの検索サイトでアプリケーションの一部のページを表示したくない場合があります。これらのサイトをインデックスするロボットは、最初にhttp://your-site.com/robots.txtファイルを分析して、インデックスを許可されるページを知ることになります。 Railsは、/publicフォルダ内にこのファイルを作成します。デフォルトでは、検索エンジンがアプリケーションのすべてのページをインデックス化することが許可されています。アプリケーションのすべてのページでインデックス化をブロックしたい場合は、次のようにします。

User-agent: *
Disallow: /

特定のページのみをブロックする場合は、より複雑な構文を使用する必要があります。公式ドキュメントで学ぶことができます(https://www.robotstxt.org/robotstxt.html)。

10 イベント駆動型ファイルシステムモニター

listen gemがロードされている場合、Railsはリロードが有効になっている場合に変更を検出するためにイベント駆動型のファイルシステムモニターを使用します。

group :development do
  gem 'listen', '~> 3.3'
end

それ以外の場合、すべてのリクエストでRailsはアプリケーションツリーを辿って変更があるかどうかを確認します。

LinuxとmacOSでは追加のgemは必要ありませんが、一部のgemが必要です(for *BSDおよびfor Windows)。

なお、一部のセットアップはサポートされていません

フィードバック

このガイドの品質向上にご協力ください。

タイポや事実の誤りを見つけた場合は、ぜひ貢献してください。 開始するには、ドキュメントへの貢献セクションを読んでください。

不完全なコンテンツや最新でない情報も見つかるかもしれません。 メインのドキュメントに不足しているドキュメントを追加してください。 修正済みかどうかは、まずEdge Guidesを確認してください。 スタイルと規約については、Ruby on Rails Guides Guidelinesを確認してください。

修正すべき点を見つけたが、自分で修正できない場合は、 問題を報告してください

そして最後に、Ruby on Railsのドキュメントに関するあらゆる議論は、公式のRuby on Railsフォーラムで大歓迎です。