本ガイドでは、Railsアプリケーションで利用可能な設定項目と初期化機能について解説します。
このガイドの内容:
Railsには初期化コードの置き場所が4箇所あります。
config/application.rbアプリケーションでRails自体が読み込まれる前に何らかのコードを実行する必要が生じることがまれにあります。その場合は、実行したいコードをconfig/application.rbファイルのrequire 'rails/all'行の上に書いてください。
一般に、Railsの設定作業には、Rails自身の設定と、Railsのコンポーネントの設定があります。config/application.rbおよび環境固有の設定ファイル(config/environments/production.rbなど)に設定を記入すると、Railsのすべてのコンポーネントにそれらの設定が反映されます。
たとえば、config/application.rbファイルに以下の設定を追加できます。
config.time_zone = 'Central Time (US & Canada)'
上はRails自身のための設定ですが、個別のRailsコンポーネントに設定を反映するときにも、以下のようにconfig/application.rb内の同じconfigオブジェクトを利用できます。
config.active_record.schema_format = :ruby
この設定は、Active Record固有の設定に使われます。
関連付けされたクラスを直接呼び出すのではなく、必ずpublicな設定メソッドを使うこと。例: ActionMailer::Base.optionsではなくRails.application.config.action_mailer.optionsを使う。
設定をクラスに直接適用する必要がある場合は、イニシャライザでActiveSupport::LazyLoadHooksをお使いください(初期化が完了する前にクラスが自動読み込みされるのを避けるため)。初期化中に自動読み込みされるとアプリの再読み込みを安全に繰り返せなくなるため、失敗します。
config.load_defaults はターゲットバージョンとそれ以前のすべてのバージョンのデフォルトの設定値を読み込みます。たとえば、config.load_defaults 6.1はバージョン6.1までの全バージョンのデフォルトを読み込みます。
ターゲットバージョンごとに関連するデフォルト値を以下に示します。値が矛盾する場合は、新しいバージョンが古いバージョンより優先されます。
config.active_job.enqueue_after_transaction_commit:default
config.active_record.postgresql_adapter_decode_datestrue
config.active_record.validate_migration_timestampstrue
config.active_storage.web_image_content_types%w[image/png image/jpeg image/gif image/webp]
config.yjittrue
config.action_dispatch.debug_exception_log_level:error
config.action_dispatch.default_headers{ "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" }
config.action_text.sanitizer_vendorRails::HTML::Sanitizer.best_supported_vendor
config.action_view.sanitizer_vendorRails::HTML::Sanitizer.best_supported_vendor
config.active_record.before_committed_on_all_recordstrue
config.active_record.belongs_to_required_validates_foreign_keyfalse
config.active_record.default_column_serializernil
config.active_record.encryption.hash_digest_classOpenSSL::Digest::SHA256
config.active_record.encryption.support_sha1_for_non_deterministic_encryptionfalse
config.active_record.generate_secure_token_on:initialize
config.active_record.marshalling_format_version7.1
config.active_record.query_log_tags_format:sqlcommenter
config.active_record.raise_on_assign_to_attr_readonlytrue
config.active_record.run_after_transaction_callbacks_in_order_definedtrue
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transactionfalse
config.active_record.sqlite3_adapter_strict_strings_by_defaulttrue
config.active_support.cache_format_version7.1
config.active_support.message_serializer:json_allow_marshal
config.active_support.raise_on_invalid_cache_expiration_timetrue
config.active_support.use_message_serializer_for_metadatatrue
config.add_autoload_paths_to_load_pathfalse
config.dom_testing_default_html_versiondefined?(Nokogiri::HTML5) ? :html5 : :html4
config.log_file_size100 * 1024 * 1024
config.precompile_filter_parameterstrue
config.action_controller.raise_on_open_redirectstrue
config.action_controller.wrap_parameters_by_defaulttrue
config.action_dispatch.cookies_serializer:json
config.action_dispatch.default_headers{ "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" }
config.action_mailer.smtp_timeout5
config.action_view.apply_stylesheet_media_defaultfalse
config.action_view.button_to_generates_button_tagtrue
config.active_record.automatic_scope_inversingtrue
config.active_record.partial_insertsfalse
config.active_record.verify_foreign_keys_for_fixturestrue
config.active_storage.multiple_file_field_include_hiddentrue
config.active_storage.variant_processor:vips
config.active_storage.video_preview_arguments"-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
config.active_support.cache_format_version7.0
config.active_support.executor_around_test_casetrue
config.active_support.hash_digest_classOpenSSL::Digest::SHA256
config.active_support.key_generator_hash_digest_classOpenSSL::Digest::SHA256
ActiveSupport.utc_to_local_returns_utc_offset_timestrue
config.action_dispatch.cookies_same_site_protection:lax
config.action_dispatch.ssl_default_redirect_status308
config.action_mailbox.queues.incinerationnil
config.action_mailbox.queues.routingnil
config.action_mailer.deliver_later_queue_namenil
config.action_view.form_with_generates_remote_formsfalse
config.action_view.preload_links_headertrue
config.active_job.retry_jitter0.15
config.active_record.has_many_inversingtrue
config.active_storage.queues.analysisnil
config.active_storage.queues.purgenil
config.active_storage.track_variantstrue
config.action_dispatch.use_cookies_with_metadatatrue
config.action_mailer.delivery_job"ActionMailer::MailDeliveryJob"
config.action_view.default_enforce_utf8false
config.active_record.collection_cache_versioningtrue
config.active_storage.queues.analysis:active_storage_analysis
config.active_storage.queues.purge:active_storage_purge
config.action_controller.default_protect_from_forgerytrue
config.action_dispatch.use_authenticated_cookie_encryptiontrue
config.action_view.form_with_generates_idstrue
config.active_record.cache_versioningtrue
config.active_support.hash_digest_classOpenSSL::Digest::SHA1
config.active_support.use_authenticated_message_encryptiontrue
config.action_view.form_with_generates_remote_formstrue
config.assets.unknown_asset_fallbackfalse
ActiveSupport.to_time_preserves_timezonetrue
config.action_controller.forgery_protection_origin_checktrue
config.action_controller.per_form_csrf_tokenstrue
config.active_record.belongs_to_required_by_defaulttrue
config.ssl_options{ hsts: { subdomains: true } }
Rails全般に対する設定を行うには、Rails::Railtieオブジェクトを呼び出すか、Rails::EngineやRails::Applicationのサブクラスを呼び出します。
config.add_autoload_paths_to_load_path自動読み込みパスを$LOAD_PATHに追加しなければならないかどうかを指定します。zeitwerkモードではconfig/application.rbでfalse に設定することが推奨されます。
Zeitwerkは内部的に絶対パスを使用し、:zeitwerkモードで動作するアプリケーションには require_dependencyが不要なので、モデル、コントローラ、ジョブなどは$LOAD_PATHに入れておく必要がありません。
これをfalseに設定すると、Ruby が相対パスでrequire呼び出しを解決する際にこれらのディレクトリをチェックする必要がなくなり、Bootsnapの作業とメモリを節約できます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.1以降 | false | 
libディレクトリはこのフラグの影響を受けません。常に$LOAD_PATHに追加されます。
config.after_initializeRailsによるアプリケーションの初期化が完了した後に実行されるブロックを渡せます。アプリケーションの初期化には、「フレームワーク自体の初期化」「エンジンの初期化」「config/initializersに記述されたすべてのアプリケーション初期化処理の実行」が含まれます。ここで渡すブロックはrakeタスクで実行されることにご注意ください。このブロックは、他のイニシャライザによってセットアップ済みの値を設定するのに便利です。
config.after_initialize do ActionView::Base.sanitized_allowed_tags.delete 'div' end
config.after_routes_loadedRailsがアプリケーションルーティングの読み込みを終了した後に実行されるブロックを受け取ります。このブロックは、ルーティングがリロードされるときにも実行されます。
config.after_routes_loaded do # Rails.application.routesで何かするコードを書く end
config.allow_concurrencyリクエストをコンカレント処理するかどうかを制御します。アプリケーションのコードがスレッドセーフでない場合のみfalseに設定する必要があります。
デフォルトはtrueです。
config.asset_hostアセットを置くホストを設定します。この設定は、アセットの置き場所がCDN(Contents Delivery Network)の場合や、別のドメインエイリアスを使うとブラウザの同時実行制限にひっかかるのを避けたい場合に便利です。この設定はconfig.action_controller.asset_hostのショートハンドです。
config.assume_sslすべてのリクエストがSSLで到着しているとアプリケーションに思わせるようにします。これは、SSLを終端するロードバランサー経由でプロキシする場合に有用で、転送されたリクエストは、アプリケーションにはHTTPSではなくHTTPであるかのように見えます。これにより、リダイレクトやcookieのセキュリティがHTTPSではなくHTTPを対象とするようになります。このミドルウェアは、プロキシが既にSSLを終端しており、リクエストは本当にHTTPSであるとサーバーに思わせるようにします。
config.autoflush_logログのファイル出力をバッファリングせず、即座に書き出す設定を有効にします。
デフォルトは true です。
config.autoload_lib(ignore:)このメソッドは、libをconfig.autoload_pathsとconfig.eager_load_pathsに追加します。
通常、libディレクトリには自動読み込みやeager loadingされるべきでないサブディレクトリがあります。その場合は、必要に応じて以下のようにignoreキーワード引数でそれらの名前をlibからの相対パスで指定してください。
config.autoload_lib(ignore: %w(assets tasks generators))
詳しくは定数の自動読み込みガイドを参照してください。
config.autoload_lib_once(ignore:)config.autoload_lib_onceメソッドは、config.autoload_libと似ていますが、libをconfig.autoload_once_pathsに追加する点が異なります。
config.autoload_lib_onceを呼び出すことで、lib内のクラスやモジュールが自動的に読み込まれます。アプリケーションの初期化時でも再読み込みは行われません。
config.autoload_once_pathsサーバーへのリクエストごとにクリアされない定数を自動読み込みするパスの配列をRailsに渡せます。この設定は再読み込みが有効になっている場合に関連し、developmentモードではデフォルトでオフになります。それ以外の場合、自動読み込みは1度しか行われません。この配列内にあるすべての要素はautoload_pathsに存在しなければなりません。
デフォルト値は空の配列です。
config.autoload_pathsRailsが定数を自動読み込みするパスの配列を渡せます。デフォルト値は空の配列です。Rails 6以降は、この設定の変更は推奨されません。詳しくは定数の自動読み込みと再読み込みを参照してください。
config.beginning_of_weekアプリケーションでデフォルトの週の初日を何曜日にするかを設定します。有効な曜日をシンボルで指定します(例::monday)。
config.cache_classes後方互換性のためにサポートされている古い設定であり、!config.enable_reloadingと同等です。
config.cache_storeRailsでのキャッシュ処理に使われるキャッシュストアを設定します。指定できるオプションは次のシンボル:memory_store、:file_store、:mem_cache_store、:null_store、:redis_cache_storeのいずれか、またはキャッシュAPIを実装するオブジェクトです。デフォルト値は:file_storeです。ストアごとの設定オプションについてはキャッシュストアを参照してください。
config.colorize_logging出力するログ情報にANSI色情報を与えるかどうかを指定します。デフォルト値はtrueです。
config.consider_all_requests_localこのフラグがtrueの場合、エラー発生の種類を問わず詳細なデバッグ情報をHTTPレスポンスに出力し、Rails::Infoコントローラがアプリケーションの実行時コンテキストを/rails/info/propertiesに出力します。このフラグはdevelopment環境とtest環境ではtrue、production環境ではfalseに設定されます。より細かく制御したい場合は、このフラグをfalseに設定してから、コントローラでshow_detailed_exceptions?メソッドを実装し、エラー時にデバッグ情報を出力したいリクエストをそこで指定します。
config.consoleこれを用いて、コンソールでrails consoleを実行する時に使われるクラスをカスタマイズできます。このメソッドはconsoleブロックで使うのが最適です。
console do # このブロックはコンソールで実行されるときしか呼び出されない # 従ってpryを安全にrequireできる require "pry" config.console = Pry end
config.content_security_policy_nonce_directivesセキュリティガイドのnonceを追加するを参照
config.content_security_policy_nonce_generatorセキュリティガイドのnonceを追加するを参照
config.content_security_policy_report_onlyセキュリティガイドの違反をレポートするを参照
config.credentials.content_path暗号化済みcredentialsファイルのパスを指定します。
デフォルトでは、config/credentials/#{Rails.env}.yml.encがあればそのパスを使い、なければconfig/credentials.yml.encを使います。
bin/rails credentialsコマンドでこの値を認識させるために、必ずconfig/application.rbファイルかconfig/environments/#{Rails.env}.rbファイルで設定しなければなりません。
config.credentials.key_path暗号化済みcredentialsキーファイルのパスを指定します。
デフォルトでは、config/credentials/#{Rails.env}.keyがあればそのパスを使い、なければconfig/master.keyを使います。
config/master.key otherwise.
bin/rails credentialsコマンドでこの値を認識させるために、必ずconfig/application.rbファイルかconfig/environments/#{Rails.env}.rbファイルで設定しなければなりません。
config.debug_exception_response_formatdevelopment環境でエラーが発生した場合に、レスポンスで使う形式を設定します。デフォルトは、API専用アプリの場合は:api、通常のアプリの場合は:defaultです。
config.disable_sandboxコンソールをsandboxモードで起動してよいかどうかを制御します。これは、sandboxコンソールのセッションを長時間動かしっぱなしにするとデータベースサーバーのメモリが枯渇するのを避けるうえで有用です。デフォルト値はfalseです。
config.dom_testing_default_html_versionAction View、Action Dispatch、rails-dom-testingのテストヘルパーでデフォルトで使うHTMLパーサーを、HTML4パーサーにするかHTML5パーサーにするかを制御します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :html4 | 
| 7.1以降 | :html5(以下の注を参照) | 
NokogiriのHTML5パーサーはJRubyではサポートされていないため、JRubyプラットフォームのRailsは:html4にフォールバックします。
config.eager_loadtrueにすると、登録されたconfig.eager_load_namespacesをeager loadingします。ここにはアプリケーション、エンジン、Railsフレームワークを含むあらゆる登録済み名前空間が含まれます。
config.eager_load_namespacesここに登録した名前は、config.eager_loadをtrueにするとeager loadingされます。登録される名前空間は、必ずeager_load!メソッドに応答しなければなりません。
config.eager_load_pathsパスの配列を引数に取ります。起動時のRailsは、cache_classesがオンの場合にこのパスからeager loadingします。デフォルトではアプリケーションのapp/ディレクトリ以下のすべてのディレクトリが対象です。
config.enable_reloadingconfig.enable_reloadingがtrueの場合、アプリケーションのクラスとモジュールが変更されると、Webリクエスト間に再読み込みされます。
デフォルトは development環境ではtrue、production環境ではfalseです。
述語config.reloading_enabled?も定義されています。
config.encodingアプリケーション全体のエンコーディングを指定します。デフォルト値はUTF-8です。
config.exceptions_app例外が発生したときにShowExceptionミドルウェアによって呼び出される例外アプリケーションを設定します。
デフォルト値はActionDispatch::PublicExceptions.new(Rails.public_path)です。
例外アプリケーションは ActionDispatch::Http::MimeNegotiation::InvalidTypeエラーを処理する必要があります。このエラーは、クライアントが無効なAcceptヘッダーまたはContent-Typeヘッダーを送信したときに発生します。
デフォルトのActionDispatch::PublicExceptionsアプリケーションは自動的にこれを行い、Content-Typeをtext/htmlに設定し、406 Not Acceptableステータスを返します。
このエラーを処理しないと、500 Internal Server Errorが発生します。
例外アプリケーションとしてRails.application.routes RouteSet を使う場合にも、この特殊な処理が必要になります。次のような感じになります。
# 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
config.file_watcherconfig.reload_classes_only_on_changeがtrueの場合に、ファイルシステム上のファイル更新検出に使われるクラスを指定します。デフォルトのRailsではActiveSupport::FileUpdateChecker、およびActiveSupport::EventedFileUpdateChecker(これはlistenに依存します)が指定されます。カスタムクラスはこのActiveSupport::FileUpdateChecker APIに従わなければなりません。
config.filter_parametersパスワードやクレジットカード番号など、ログに出力したくないパラメータをフィルタで除外するのに用います。また、Active Recordオブジェクトに対して#inspectを呼び出した際に、データベースの機密性の高い値をフィルタで除外します。デフォルトのRailsではconfig/initializers/filter_parameter_logging.rbに以下の記述を追加することでパスワードをフィルタで除外しています。
Rails.application.config.filter_parameters += [ :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn ]
パラメータのフィルタは正規表現の部分一致によって行われます(訳注: 他のパラメータ名が誤って部分一致しないようご注意ください)。
config.filter_redirectアプリケーションログからリダイレクトURLをフィルタで除外するために使います。
Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
リダイレクトフィルターは、URLが文字列を含むか、あるいは正規表現にマッチするかをテストすることで動作します。
config.force_sslすべてのリクエストをHTTPSプロトコル下で実行するよう強制し、URL生成でも"https://"をデフォルトのプロトコルに設定します。HTTPSの強制はActionDispatch::SSLミドルウェアによって行われ、config.ssl_optionsで設定できます。詳しくはAPIドキュメントActionDispatch::SSLを参照してください。
config.helpers_pathsビューヘルパーを読み込むための追加パスを配列で定義します。
config.host_authorizationHostAuthorizationミドルウェアを設定するオプションハッシュを受け取ります。
config.hostsHostヘッダの有効性を確認するために使われる、「文字列」「正規表現」「IPAddr」の配列です。HostAuthorization ミドルウェアで使われ、DNSリバインディング攻撃を防ぐのに役立ちます。
config.javascript_pathアプリのJavaScriptを保存するパスを、app/ディレクトリからの相対パスで設定します。デフォルト値はjavascriptです(webpackerで使われます)。アプリで設定済みのjavascript_pathはautoload_pathsから除外されます。
config.log_file_sizeRailsのログファイルの最大サイズをバイト単位で定義します。development環境とtest環境では104_857_600(100 MiB)がデフォルトで、それ以外の環境では無制限となります。
config.log_formatterRailsロガーのフォーマットを定義します。このオプションは、デフォルトではすべてのモードでActiveSupport::Logger::SimpleFormatterのインスタンスを使います。config.loggerを設定する場合は、この設定がActiveSupport::TaggedLoggingインスタンスでラップされるより前の段階で、フォーマッターの値を手動で渡さなければなりません(Railsはこの処理を自動では行いません)。
config.log_levelRailsのログ出力をどのぐらい詳細にするかを指定します。デフォルト値は、production環境では:info、それ以外の環境では:debugです。指定可能な出力レベルは:debug、:info、:warn、:error、:fatal、:unknownです。
config.log_tags「requestオブジェクトが応答するメソッド」「requestオブジェクトを受け取るProc」または「to_sに応答できるオブジェクト」のリストを引数に取ります。これは、ログの行にデバッグ情報をタグ付けする場合に便利です。たとえばサブドメインやリクエストidを指定可能で、これらはマルチユーザーのproductionアプリケーションのデバッグで非常に有用です。
config.loggerRails.loggerで使われるロガーやRails関連のあらゆるロガー(ActiveRecord::Base.loggerなど)を指定します。デフォルトでは、ActiveSupport::LoggerのインスタンスをラップするActiveSupport::TaggedLoggingのインスタンスが指定されます。なおActiveSupport::Loggerはログをlog/ディレクトリに出力します。ここにカスタムロガーを指定できますが、互換性を完全にするには以下のガイドラインに従わなければなりません。
config.log_formatterの値を手動でロガーに代入しなければなりません。ActiveSupport::TaggedLoggingでラップしなければなりません。LoggerSilenceモジュールをincludeしなければなりません。ActiveSupport::Loggerクラスは既にこれらのモジュールにincludeされています。class MyLogger < ::Logger include ActiveSupport::LoggerSilence end mylogger = MyLogger.new(STDOUT) mylogger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(mylogger)
config.middlewareアプリケーションで使うミドルウェアをカスタマイズできます。詳細についてはミドルウェアを設定するの節を参照してください。
config.precompile_filter_parameterstrueに設定すると、ActiveSupport::ParameterFilter.precompile_filtersを用いてconfig.filter_parametersをプリコンパイルします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.public_file_server.enabledRailsのpublicディレクトリから静的ファイルを配信するかどうかを設定します。
デフォルトはtrueです。
NGINXやApacheなどのサーバーソフトウェアが静的ファイルを配信する場合は、この値をfalseに設定します。
config.railties_orderRailties/Engineの読み込み順序を手動で指定できます。
デフォルトは [:all] です。
config.railties_order = [Blog::Engine, :main_app, :all]
config.rake_eager_loadtrueにすると、Rakeタスク実行中にアプリケーションをeager loadingします。
デフォルト値はfalseです。
config.read_encrypted_secrets非推奨: 暗号化済みsecrets(秘密情報)ではなく、credentialsを使うこと。
trueに設定すると、暗号化済みsecretsをconfig/secrets.yml.encから読み込もうとします。
config.relative_url_rootサブディレクトリにデプロイすることをRailsに指示します。
デフォルトは ENV['RAILS_RELATIVE_URL_ROOT'] です。
config.reload_classes_only_on_changeトラッキングしているファイルが変更された場合のみのクラス再読み込みを有効または無効にします。
デフォルトでは、すべての自動読み込みパスをトラッキングし、trueに設定されています。
このオプションは、config.enable_reloadingがfalseの場合は無視されます。
config.require_master_keyENV["RAILS_MASTER_KEY"]環境変数またはconfig/master.keyファイルからマスターキーを取得できない場合はアプリを起動しないようにします。
config.sandbox_by_defaulttrueにすると、Railsコンソールをsandboxモードで起動します。sandboxモードを無効にしてRailsコンソールを起動するには、--no-sandboxを明示的に指定しなければなりません。これは、production環境のデータベースに誤って書き込むのを防止したいときに有用です。デフォルト値はfalseです。
config.secret_key_baseアプリケーションのキージェネレータに入力する秘密鍵を指定する際に使われるフォールバックです。
これは設定せずに、config/credentials.yml.encでsecret_key_baseを指定することが推奨されます。別の設定方法などについて詳しくはAPIドキュメントsecret_key_baseを参照してください。
config.server_timingtrueにすると、ServerTimingミドルウェアをミドルウェアスタックに追加します。デフォルトはfalseですが、生成されるデフォルトのconfig/environments/development.rbファイルではtrueに設定されます。
config.session_optionsconfig.session_storeに渡される追加オプションです。この設定は、自分で変更するのではなく、config.session_storeで設定する必要があります。
config.session_store :cookie_store, key: "_your_app_session" config.session_options # => {key: "_your_app_session"}
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
デフォルトのストアは、アプリケーション名をセッションキーとするcookieストアです。
config.ssl_optionsActionDispatch::SSLミドルウェアの設定オプションを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | {} | 
| 5.0以降 | { hsts: { subdomains: true } } | 
config.time_zoneアプリケーションのデフォルトタイムゾーンを設定し、Active Recordで認識できるようにします。
config.xネストしたカスタム設定をアプリケーションの設定オブジェクトに手軽に追加したい場合に利用できます。
config.x.payment_processing.schedule = :daily Rails.configuration.x.payment_processing.schedule # => :daily
カスタム設定を参照。
config.yjitRuby 3.3以降でYJITを有効にするための設定です。メモリ制約のある環境でデプロイする場合は、falseに設定できます。
| 以下のバージョン以降 | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.2 | true | 
config.assets.css_compressorCSSの圧縮に用いるプログラムを定義します。このオプションは、sass-railsによってデフォルトで設定されます。現時点で他に設定できるのは:yuiオプションだけです。この場合yui-compressor gemを利用します。
config.assets.js_compressorJavaScriptの圧縮に使うプログラムを定義します。指定できる値は :terser、:closure、:uglifier、:yuiです。それぞれ terser gem、closure-compiler gem、uglifier gem、yui-compressor gemに対応します。
config.assets.gzipgzipされていないバージョンの作成に加えて、コンパイル済みアセットのgzipバージョン作成も有効にするかどうかを指定するフラグです。デフォルト値はtrueです。
config.assets.pathsアセット探索用のパスを指定します。この設定オプションにパスを追加すると、アセットの探索先として追加されます。
config.assets.precompileapplication.cssとapplication.js以外に追加したいアセットがある場合に指定します。これらはbin/rails assets:precompileを実行するときに一緒にプリコンパイルされます。
config.assets.unknown_asset_fallbackアセットがパイプラインにない場合のアセットパイプラインの挙動の変更に使います(sprockets-rails 3.2.0以降を使う場合)。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| 以下のバージョン以降 | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 5.1 | false | 
config.assets.prefixアセットを置くディレクトリを指定します。デフォルト値は/assetsです。
config.assets.manifestアセットプリコンパイラのマニフェストファイルで使うフルパスを定義します。デフォルトでは、config.assets.prefixで指定されたpublic/フォルダ内にあるmanifest-<ランダム>.jsonという名前のファイルになります。
config.assets.digestアセット名に使うSHA256フィンガープリントを有効にするかどうかを指定します。デフォルトでtrueに設定されます。
config.assets.debugデバッグ用にアセットの結合と圧縮をやめるかどうかを指定します。development.rbではデフォルトでtrueに設定されます。
config.assets.versionSHA256ハッシュ生成に使われるオプション文字列です。この値を変更すると、すべてのアセットファイルが強制的に再コンパイルされます。
config.assets.compileproduction環境での動的なSprocketsコンパイルをオンにするかどうかを指定するboolean値です。
config.assets.loggerロガーを引数に取ります。このロガーは、Log4rのインターフェイスか、RubyのLoggerクラスに従います。デフォルトでは、config.loggerと同じ設定が使われます。config.assets.loggerをfalseに設定すると、配信されたアセットのログ出力がオフになります
config.assets.quietアセットへのリクエストのログ出力を無効にします。デフォルトではconfig/environments/development.rbでtrueに設定されます。
config.generatorsメソッドを使って、Railsで使うジェネレータを変更できます。このメソッドはブロックを1つ受け取ります。
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_controller: rails generate resourceの実行時にどのジェネレータでコントローラを生成するかを指定します。デフォルト値は:controllerです。
resource_route: リソースのルーティング定義を生成すべきかどうかを定義します。デフォルト値はtrueです。
scaffold_controller: resource_controllerと同じではありません。bin/rails generate scaffoldを実行したときに scaffoldでどのジェネレータでコントローラを生成するかを指定します。デフォルト値は:scaffold_controllerです。
test_framework: 利用するテストフレームワークを指定します。デフォルト値はfalseであり、この場合minitestが使われます。
template_engine: ビューのテンプレートエンジン(ERBやHamlなど)を指定します。デフォルト値は:erbです。
apply_rubocop_autocorrect_after_generate!: Railsジェネレータ実行後にRuboCopのオートコレクト機能を適用します。
どのRailsアプリケーションの背後にも、いくつかの標準的なミドルウェアが配置されています。development環境では、以下の順序でミドルウェアを使います。
ActionDispatch::HostAuthorizationDNSリバインディングやその他のHostヘッダー攻撃を防ぎます。
development環境ではデフォルトで以下の設定が含まれます。
Rails.application.config.hosts = [ IPAddr.new("0.0.0.0/0"), # すべてのIPv4アドレス IPAddr.new("::/0"), # すべてのIPv6アドレス "localhost", # localhost予約済みドメイン ENV["RAILS_DEVELOPMENT_HOSTS"] # 開発用の追加ホストリスト(カンマ区切り) ]
development以外の環境では、Rails.application.config.hostsは空になり、Hostヘッダーチェックは行われません。production環境でヘッダー攻撃から保護したい場合は、以下のように手動でホストを許可する必要があります。
Rails.application.config.hosts << "product.com"
リクエストのホストは、case演算子(#===)でhostsのエントリと照合されるので、Regexp型、Proc型、IPAddr型のエントリがhostsでサポートされます。以下は正規表現を使った例です。
# `www.product.com`や`beta1.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"
Host Authorizationチェックで特定のリクエストを除外するには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 }
ActionDispatch::ServerTimingサーバーのパフォーマンスメトリクスを含むServer-Timingヘッダーをレスポンスに追加します。このデータは、ブラウザのDevToolsの「Network」ペインでレスポンスを調べることで確認できます。ほとんどのブラウザには、このデータを可視化する「Timing」タブがあります。
ActionDispatch::SSLすべてのリクエストでHTTPSプロトコルを強制します。これはconfig.force_sslをtrueにすると有効になります。渡すオプションはconfig.ssl_optionsで設定できます。
ActionDispatch::Static静的アセットの配信に使います。config.public_file_server.enabledがfalseの場合は無効に設定されます。静的ディレクトリのインデックスファイルがindexでない場合には、config.public_file_server.index_nameを設定してください。たとえば、ディレクトリへのリクエストをindex.htmlではなくmain.htmlで扱うには、config.public_file_server.index_nameを"main"に設定します。
ActionDispatch::Executorスレッドセーフなコード再読み込みを許可します。これはconfig.allow_concurrencyがfalseの場合に無効になり、Rack::Lockが読み込まれるようになります。Rack::Lockはアプリケーションをミューテックスにラップするので、同時に1つのスレッドでしか呼び出されなくなります。
ActiveSupport::Cache::Strategy::LocalCache基本的なメモリバックアップ式キャッシュとして機能します。このキャッシュはスレッドセーフではなく、単一スレッド用の一時メモリキャッシュとして機能するためのものである点にご注意ください。
Rack::RuntimeX-Runtimeヘッダーを設定します。このヘッダーには、リクエストの実行に要した時間(秒)が含まれます。
Rails::Rack::Loggerリクエストが開始されたことをログに通知します。リクエストが完了すると、すべてのログをフラッシュします。
ActionDispatch::ShowExceptionsアプリケーションから返されるすべての例外をrescueし、リクエストがローカルであるかconfig.consider_all_requests_localがtrueに設定されている場合に適切な例外ページを出力します。config.action_dispatch.show_exceptionsが:noneに設定されていると、常に例外が出力されます。
ActionDispatch::RequestIdレスポンスで利用できる独自のX-Request-Idヘッダーを作成し、ActionDispatch::Request#uuidメソッドを有効にします。config.action_dispatch.request_id_headerで設定可能です。
ActionDispatch::RemoteIpIPスプーフィング攻撃が行われていないかどうかをチェックし、リクエストヘッダーから正しいclient_ipを取得します。この設定はconfig.action_dispatch.ip_spoofing_checkオプションとconfig.action_dispatch.trusted_proxiesオプションで変更可能です。
Rack::Sendfilebodyがファイルから配信されているレスポンスをインターセプトし、サーバー固有のX-Sendfileヘッダーに差し替えてから送信します。この動作はconfig.action_dispatch.x_sendfile_headerで設定可能です。
ActionDispatch::Callbacksリクエストを処理する前に、事前コールバックを実行します。
ActionDispatch::Cookiesリクエストにcookieを設定します。
ActionDispatch::Session::CookieStoreセッションをcookieに保存する役割を担います。config.session_storeの値を変更すると別のミドルウェアを使えます。
ActionDispatch::Flashflashキーを設定します。これは、config.session_storeに値が設定されている場合にのみ有効です。
Rack::MethodOverrideparams[:_method]が設定されている場合にHTTPメソッドの上書きを許可します。これは、HTTPでPATCH、PUT、DELETEメソッドを使えるようにするミドルウェアです。
Rack::HeadすべてのHEADリクエストに対して空のbodyを返します。その他すべてのリクエストは変更されません。
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
以下のオプションはすべてi18n(internationalization: 国際化)ライブラリ用のオプションです。
config.i18n.available_localesアプリケーションで利用できるロケールの許可リストを定義します。デフォルトでは、ロケールファイルにあるロケールキーはすべて有効になりますが、新しいアプリケーションの場合、通常は:enだけです。
config.i18n.default_localeアプリケーションのi18nで使われるデフォルトのロケールを設定します。デフォルト値は:enです。
config.i18n.enforce_available_localesこれをオンにすると、available_localesリストで宣言されていないロケールはi18nに渡せなくなります。利用できないロケールがある場合はi18n::InvalidLocale例外が発生します。デフォルト値はtrueです。このオプションは、ユーザー入力のロケールが不正である場合のセキュリティ対策であるため、特別な理由がない限り無効にしないことをおすすめします。
config.i18n.load_pathロケールファイルの探索パスを設定します。デフォルト値はconfig/locales/*.{yml,rb}です。
config.i18n.raise_on_missing_translationsコントローラやビューで訳文が見つからない場合にエラーをraiseするかどうかを指定します。デフォルト値はfalseです。
config.i18n.fallbacks訳文がない場合のフォールバック動作を設定します。ここではオプションの3つの使い方を説明します。
trueを設定します。config.i18n.fallbacks = true
config.i18n.fallbacks = [:tr, :en]
:azに:trを、:daに:deと:enをそれぞれフォールバック先として指定する場合は、次のようにします。config.i18n.fallbacks = { az: :tr, da: [:de, :en] } # または config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
config.active_model.i18n_customize_full_messageError#full_messageエラーフォーマットをi18nのロケールファイルで上書きしてよいかどうかを制御するboolean値です。デフォルト値はfalseです。
trueに設定すると、full_messageはロケールファイルの属性とモデルレベルでフォーマットを探索します。デフォルトのフォーマットは"%{attribute} %{message}"で、attributeは属性名、messageはバリデーション固有のメッセージです。以下の例では、すべての Person属性と、特定のPerson属性(age)のフォーマットをオーバーライドしています。
class Person include ActiveModel::Validations attr_accessor :name, :age validates :name, :age, presence: true end
en:
  activemodel: # または 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"]
}
config.active_recordには多くのオプションが含まれています。
config.active_record.loggerLog4rのインターフェイスまたはデフォルトのRuby Loggerクラスに従うロガーを引数として取ります。このロガーは以後作成されるすべての新しいデータベース接続に渡されます。Active Recordのモデルクラスまたはモデルインスタンスに対してloggerメソッドを呼び出すと、このロガーを取り出せます。ログ出力を無効にするにはnilを設定します。
config.active_record.primary_key_prefix_type主キーカラムの命名法を変更するのに使います。Railsでは、主キーカラムの名前にデフォルトでidが使われます (なおidにする場合は値の設定は不要です)。id以外に以下の2つを指定できます。
:table_name: たとえばCustomerクラスの主キーはcustomeridになります:table_name_with_underscore: たとえばCustomerクラスの主キーはcustomer_idになりますconfig.active_record.table_name_prefixテーブル名の冒頭にグローバルに追加したい文字列を指定します。たとえばnorthwest_を指定すると、Customerクラスはnorthwest_customersをテーブルとして探します。デフォルト値は空文字列です。
config.active_record.table_name_suffixテーブル名の末尾にグローバルに追加したい文字列を指定します。たとえば_northwestを指定すると、Customerクラスはcustomers_northwestをテーブルとして探します。デフォルト値は空文字列です。
config.active_record.schema_migrations_table_nameスキーママイグレーションのテーブル名に使う文字列を指定します。
config.active_record.internal_metadata_table_name内部のメタテーブル名に使う文字列を設定できます。
config.active_record.protected_environments破壊的操作を禁止すべき環境名を配列で設定できます。
config.active_record.pluralize_table_namesRailsが探すデータベースのテーブル名を単数形にするか複数形にするかを指定します。trueに設定すると、Customerクラスが使うテーブル名は複数形のcustomersになります(デフォルト)。falseに設定すると、Customerクラスが使うテーブル名は単数形のcustomerになります。
config.active_record.default_timezoneデータベースから日付・時刻を取り出した際のタイムゾーンをTime.local(:localを指定した場合)とTime.utc(:utcを指定した場合)のどちらにするかを指定します。デフォルト値は:utcです。
config.active_record.schema_formatデータベーススキーマをファイルに書き出すときのフォーマットを指定します。デフォルト値は:rubyで、データベースには依存せず、マイグレーションに依存します。:sqlを指定するとSQL文で書き出されますが、この場合潜在的にデータベースに依存する可能性があります。
config.active_record.error_on_ignored_orderバッチクエリの実行中にクエリの順序が無視された場合にエラーをraiseすべきかどうかを指定します。オプションはtrue(エラーをraise)またはfalse(警告)で、デフォルト値はfalseです。
config.active_record.timestamped_migrationsマイグレーションファイル名にシリアル番号とタイムスタンプのどちらを与えるかを指定します。デフォルト値はtrueで、タイムスタンプが使われます。複数の開発者が作業する場合は、タイムスタンプの利用をおすすめします。
config.active_record.automatically_invert_plural_associations複数形の名前を持つ逆関連付けをActive Recordが自動的に探索するかどうかを指定します。
例:
class Post < ApplicationRecord has_many :comments end class Comment < ApplicationRecord belongs_to :post end
従来は、Active Recordは上のコードのPostモデルで単数形の:comment関連付けのみを探索するだけで、見つけられませんでした。
このオプションを有効にすると、複数形の:comments関連付けも検索します。ほとんどの場合、逆関連付けを検出すると無駄なクエリを回避できるため便利ですが、それを想定していないレガシーコードとの下位互換性問題が発生する可能性があります。
この振る舞いはモデル単位で無効にできます。
class Comment < ApplicationRecord self.automatically_invert_plural_associations = false belongs_to :post end
以下のように関連付け単位でも設定できます。
class Comment < ApplicationRecord self.automatically_invert_plural_associations = true belongs_to :post, inverse_of: nil end
| 以下のバージョン以降 | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
config.active_record.validate_migration_timestampsマイグレーションのタイムスタンプを検証するかどうかを制御します。
有効にすると、マイグレーションファイル名のタイムスタンプが現在の時刻に関連付けられるタイムスタンプより1日以上進んでいる場合は、エラーが発生します。これは、マイグレーションファイルが未来の日付になるのを防ぐためです。日付が未来になると、マイグレーションの生成やその他のマイグレーションコマンドに影響する可能性があります。
config.active_record.timestamped_migrationsはtrueに設定する必要があります。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| 以下のバージョン以降 | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.2 | true | 
config.active_record.db_warnings_actionSQLクエリで警告が発生したときの動作を制御します。以下のオプションが利用可能です。
:ignore: データベースの警告は無視されます(デフォルト)。
:log: データベースの警告をActiveRecord.loggerを用いて:warnレベルで記録します。
:raise: データベースの警告をActiveRecord::SQLWarningとしてraiseします。
:report: RailsのErrorReporterのサブスクライバに報告します。
カスタム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
config.active_record.db_warnings_ignore設定されたdb_warnings_actionにかかわらず無視する警告コードとメッセージの許可リストを指定します。
デフォルトの振る舞いでは、すべての警告を報告します。無視する警告は、以下のように文字列または正規表現で指定できます。たとえば、以下のようになります:
config.active_record.db_warnings_action = :raise # 以下の警告はraiseされなくなる config.active_record.db_warnings_ignore = [ /Invalid utf8mb4 character string/, "An exact warning message", "1062", # MySQL Error 1062: Duplicate entry ]
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
config.active_record.lock_optimisticallyActive Recordで楽観的ロック(optimistic locking)を使うかどうかを指定します。デフォルト値はtrue(利用する)です。
config.active_record.cache_timestamp_formatキャッシュキーに含まれるタイムスタンプ値の形式を指定します。デフォルト値は:usecです。
config.active_record.record_timestampsモデルで発生するcreate操作やupdate操作にタイムスタンプを付けるかどうかを指定します。デフォルト値はtrueです。
config.active_record.partial_inserts新規レコード作成で部分書き込みを行うかどうか(挿入時にデフォルトと異なる属性だけを設定するかどうか)を指定するboolean値です。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.0以降 | false | 
config.active_record.partial_updates既存レコードの更新で部分書き込みを行なうかどうか(「dirty」とマークされた属性だけを更新するか)を指定するboolean値です。データベースで部分書き込みを使う場合は、config.active_record.lock_optimisticallyで楽観的ロックも有効にする必要がある点にご注意ください。これは更新処理が並行して実行された場合に、読み込み中の古い情報に基づいて属性に書き込まれる可能性があるためです。デフォルト値はtrueです。
config.active_record.maintain_test_schemaテスト実行時にActive Recordがテスト用データベーススキーマをdb/schema.rb(またはdb/structure.sql)に基づいて最新の状態にするかどうかを指定します。デフォルト値はtrueです。
config.active_record.dump_schema_after_migrationマイグレーション実行時にスキーマダンプ(db/schema.rbまたはdb/structure.sql)を行なうかどうかを指定します。このオプションは、Railsが生成するconfig/environments/production.rbではfalseに設定されます。この設定が無指定の場合は、デフォルトのtrueが指定されます。
config.active_record.dump_schemasdb:structure:dumpの呼び出し時にデータベーススキーマをダンプするかどうかを指定します。利用可能なオプションは、:schema_search_path(デフォルト、schema_search_path内のすべてのスキーマをダンプ)、:all(schema_search_pathと無関係にすべてのスキーマをダンプ)、またはスキーマ文字列(カンマ区切り)です。
config.active_record.before_committed_on_all_recordsトランザクションに登録されているすべてのレコードに対して、before_committed!コールバックを有効にします。
従来の動作は、トランザクションに登録されている同じレコードのコピーが複数ある場合、レコードの最初のコピーに対してのみコールバックを実行します。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_record.belongs_to_required_by_defaultbelongs_to関連付けが存在しない場合にレコードのバリデーションを失敗させるかどうかを指定するboolean値です。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | nil | 
| 5.0以降 | true | 
config.active_record.belongs_to_required_validates_foreign_key親が必須である場合に、親に関連するカラムについてのみ存在をバリデーションします。 従来の動作では、親レコードの存在をバリデーションするときに、親が変更されていない場合でも、子レコードが更新されるたびに親を取得するクエリが余分に実行されていました。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.1以降 | false | 
config.active_record.marshalling_format_version7.1に設定すると、Active RecordインスタンスをMarshal.dumpでより効率的にシリアライズ可能になります。
これによりシリアライズ形式が変更されるため、この方法でシリアライズされたモデルは古いバージョンのRails(< 7.1)では読み込めなくなります。 ただし、この最適化が有効かどうかにかかわらず、古い形式を使用するメッセージは引き続き読み込めます。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | 6.1 | 
| 7.1以降 | 7.1 | 
config.active_record.action_on_strict_loading_violation関連付けにstrict_loadingが設定されている場合に、例外をraiseするかログに出力するかを設定します。デフォルト値はすべての環境で:raiseです。これを:logに変更すると、例外をraiseせずにロガーに送信できます。
config.active_record.strict_loading_by_defaultstrict_loadingモードをデフォルトで有効にするか無効にするかを指定するboolean値です。デフォルト値はfalseです。
config.active_record.warn_on_records_fetched_greater_thanクエリ結果のサイズに応じて警告を出す場合の閾値(threshold)を設定します。あるクエリから返されるレコード数がこの閾値を超えると、警告がログに出力されます。これは、メモリ肥大化の原因となっている可能性のあるクエリを特定するのに利用できます。
config.active_record.index_nested_attribute_errorsネストしたhas_many関連付けのエラーをインデックス付きでエラー表示するかどうかを指定します。デフォルト値はfalseです。
config.active_record.use_schema_cache_dump(bin/rails db:schema:cache:dumpで生成された)db/schema_cache.ymlのスキーマ情報を、データベースにクエリを送信しなくてもユーザーが取得できるようにするかどうかを指定します。デフォルト値はtrueです。
config.active_record.cache_versioningキャッシュバージョン変更を伴う安定した#cache_keyメソッドを#cache_versionメソッドで使うかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.2以降 | true | 
config.active_record.collection_cache_versioningActiveRecord::Relation型でキャッシュされたオブジェクトが、そのリレーションのキャッシュキーの揮発性の情報(updated atとcountの最大値)をキャッシュキーの再利用サポートのためにキャッシュバージョンに移動したときに、同じキャッシュキーが再利用されるようにします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 6.0以降 | true | 
config.active_record.has_many_inversingbelongs_to関連付けをhas_many関連付けにトラバースするときに逆方向の(inverse)レコードを設定できるようにします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 6.1以降 | true | 
config.active_record.automatic_scope_inversingスコープ付き関連付けでinverse_ofを自動的に推論するようにします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
config.active_record.destroy_association_async_job関連付けられたレコードの非同期削除に使うジョブを指定します。デフォルト値はActiveRecord::DestroyAssociationAsyncJobです。
config.active_record.destroy_association_async_batch_sizedependent: :destroy_async関連オプションによってバックグラウンドジョブで破棄されるレコードの最大数を指定できます。
他の条件が同じであれば、バッチサイズが小さいほど、エンキューされるバックグラウンドジョブの個数が増える代わりに個別の実行時間が短くなり、バッチサイズが大きいほど、エンキューされるバックグラウンドジョブの個数が減る代わりに個別の実行時間が長くなります。
このオプションのデフォルトはnilで、指定された関連付けのすべての依存レコードが同じバックグラウンドジョブで破棄されます。
config.active_record.queues.destroy非同期の破棄ジョブに使うActive Jobキューを指定できます。このオプションをnilにすると、purgeジョブがデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルト値はnilです。
config.active_record.enumerate_columns_in_select_statementstrueにすると、SELECT文に常にカラム名が含まれるようになり、SELECT * FROM ...のようなワイルドカードクエリを回避します。これにより、PostgreSQLデータベースにカラムを追加するときなどに、prepared statementのキャッシュエラーを回避できるようになります。デフォルト値はfalseです。
config.active_record.verify_foreign_keys_for_fixturesフィクスチャがテストに読み込まれた後で、すべての外部キー制約が有効になるようにします(PostgreSQLとSQLiteのみ)。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
config.active_record.raise_on_assign_to_attr_readonlyattr_readonly属性への代入時のraiseを有効にします。
従来の動作では代入してもraiseしませんが、変更がデータベースで永続化されません。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transactionActive Recordの複数のインスタンスがトランザクション内で同一のレコードを変更する場合、そのうちの1つに対してのみafter_commitまたはafter_rollbackコールバックを実行します。このオプションは、どのインスタンスがコールバックを受け取るかをRailsが選択する方法を指定します。
trueの場合、トランザクションコールバックは、そのインスタンスのステートが古くなっていても、最初にsaveされるインスタンスで実行されます。
falseの場合、トランザクションコールバックは、ステートが最新であるインスタンスで実行されます。これらのインスタンスは次のように選択されます。
saveする場合は、最新のインスタンスでトランザクションコールバックを実行します。after_create_commitコールバックは2番目のインスタンスで実行されます。これは、インスタンスのステートに基づいてナイーブに実行されるafter_update_commitコールバックの代わりに実行されます。after_destroy_commitコールバックは最後に破棄されたインスタンスで実行されます。デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.1以降 | false | 
config.active_record.default_column_serializerカラムでシリアライザが明示的に指定されていない場合に使うシリアライザーの実装です。
歴史的に serializeとstoreは異なるシリアライザ実装を利用可能ですが、デフォルトではYAMLを利用します。しかし、このフォーマットはあまり効率的ではなく、慎重に採用しないとセキュリティの脆弱性の原因となる可能性があります。
そのため、データベースのシリアライズには、従来よりも厳格かつ限定的なフォーマットを選択することが推奨されます。
残念ながら、Rubyの標準ライブラリには適切なデフォルトがありません。JSONはフォーマットとして機能しますが、json gemsはサポートされていない型を文字列にキャストするため、バグを引き起こす可能性があります。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | YAML | 
| 7.1以降 | nil | 
config.active_record.run_after_transaction_callbacks_in_order_definedtrueにすると、after_commitコールバックはモデル内で定義された順に実行されます。falseにすると、逆順に実行されます。
その他のコールバックは、常にモデルで定義された順序で実行されます(prepend: trueを使わない限り)。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_record.query_log_tags_enabledクエリコメントをアダプタレベルで有効にするかどうかを指定します。
デフォルト値はfalseです。
これをtrueに設定すると、データベースの「prepared statement」は自動的に無効になります。
config.active_record.query_log_tagsSQLコメントに挿入するキーバリュータグを指定するArrayを定義します。
デフォルト値は、[ :application, :controller, :action, :job ]です。
利用可能なタグは、:application、:controller、:namespaced_controller、:action、:job、:source_locationです。
config.active_record.query_log_tags_formatQueryLogsのタグに使うフォーマッタをSymbolで指定します。有効な値は:sqlcommenterと:legacyです。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :legacy | 
| 7.1以降 | :sqlcommenter | 
config.active_record.cache_query_log_tagsクエリログタグのキャッシュを有効にするかどうかを指定します。クエリ数が非常に多いアプリケーションでは、クエリログタグのキャッシュを有効にすると、リクエストやジョブの実行中にコンテキストが変更されない場合にパフォーマンスが向上します。
デフォルト値はfalseです。
config.active_record.schema_cache_ignored_tablesスキーマキャッシュの生成中に無視するテーブルのリストを定義します。テーブル名を表す文字列のArrayまたは正規表現を指定できます。
config.active_record.verbose_query_logsデータベースクエリを呼び出すメソッドのソースコードの位置を、関連するクエリでログに出力するかどうかを指定します。デフォルトでは、development環境でtrue、それ以外の環境ではfalseに設定されます。
config.active_record.sqlite3_adapter_strict_strings_by_defaultSQLite3Adapterを"strict strings"モードで利用するかどうかを指定します。
このモードにすると、二重引用符("")で囲まれた文字列リテラルが無効になります。
SQLiteは、二重引用符で囲まれた文字列リテラルに関していくつかの癖があります。 SQLiteは最初に、二重引用符で囲まれた文字列を識別子名と見なそうとしますが、識別子が存在しない場合は文字列リテラルと見なします。このため、入力ミスを見落とす可能性があります。たとえば、存在しないカラムに対してインデックスを作成できてしまいます。
詳しくはSQLiteのドキュメントを参照してください。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_record.postgresql_adapter_decode_datesPostgresqlAdapterでdateカラムをデコードするかどうかを指定します。
ActiveRecord::Base.connection .select_value("select '2024-01-01'::date").class #=> Date
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.2 | true | 
config.active_record.async_query_executor非同期クエリをプールする方法を指定します。
デフォルトはnilで、この場合load_asyncは無効になり、クエリをフォアグラウンドで直接実行します。
クエリを実際に非同期実行する場合は、必ず:global_thread_poolまたは:multi_thread_poolを指定しなければなりません。
:global_thread_pool: アプリケーションが接続するすべてのデータベースで単一のプールを使います。この設定は、データベースが1つしかないアプリケーションや、データベースのシャードに1度に1件しかクエリを発行しないアプリケーションに適しています。
:multi_thread_pool: データベースごとに1つのプールを使います。各プールのサイズは、database.ymlファイルのmax_threadsプロパティやmin_threadプロパティで設定できます。この設定は、クエリを複数のデータベースに対して発行することが多いアプリケーションで、並行処理の最大数をより正確に定義したい場面で有用です。
config.active_record.global_executor_concurrencyconfig.active_record.async_query_executor = :global_thread_pool設定で、並行(concurrent)に実行できる非同期クエリの個数を定義します。
デフォルトは4です。
この数値を検討するときは、database.ymlで設定されているデータベースコネクションのプールサイズと調和させなければなりません。コネクションプールのサイズは、フォアグラウンドのスレッド(Webサーバーやジョブワーカーのスレッド)とバックグラウンドのスレッドを両方とも扱えるサイズにする必要があります。
Railsはプロセスごとに、この個数のスレッドを用いて非同期クエリを処理するグローバル クエリエグゼキュータを1つ作成します。したがって、プールサイズはthread_count + global_executor_concurrency + 1以上である必要があります。たとえば、Webサーバーの最大スレッド数が3で、global_executor_concurrencyが4に設定されている場合、プールサイズは8以上にする必要があります。
config.active_record.yaml_column_permitted_classesデフォルトは[Symbol]です。ここで追加したクラスのリストは、ActiveRecord::Coders::YAMLColumnのsafe_load()でアプリケーションに含まれるようになります。
config.active_record.use_yaml_unsafe_loadデフォルトはfalseです。アプリケーションがActiveRecord::Coders::YAMLColumnに対してunsafe_loadを利用することを許可します。
config.active_record.raise_int_wider_than_64bitデフォルトはtrueです。PostgreSQLアダプタに64ビット符号付き整数表現を超える整数が渡された場合に例外を発生させるかどうかを指定します。
config.active_record.generate_secure_token_onhas_secure_token宣言の値が生成されるタイミングを制御します。デフォルトでは、モデルが初期化されたときに値が生成されます。
class User < ApplicationRecord has_secure_token end record = User.new record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
config.active_record.generate_secure_token_on = :createを指定すると、モデルの作成時に値が生成されます。
# config/application.rb config.active_record.generate_secure_token_on = :create # app/models/user.rb class User < ApplicationRecord has_secure_token on: :create end record = User.new record.token # => nil record.save! record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :create | 
| 7.1以降 | :initialize | 
config.active_record.permanent_connection_checkoutActiveRecord::Base.connectionの振る舞いを、「エラーを発生」「非推奨警告を表示」「どちらも行わない」のどれにするかを制御します。
ActiveRecord::Base.connectionは、プールからデータベースコネクションをチェックアウトし、リクエストやジョブの終了までリースされた状態にします。この振る舞いは、使用可能なコネクション数よりも多くのスレッドまたはファイバーを利用する環境では望ましくない場合があります。
この設定を使うことで、ActiveRecord::Base.connectionを呼び出すコードをトラッキングして削除し、代わりにActiveRecord::Base.with_connectionを利用する形に移行できます。
設定可能な値は、:disallowed(エラーを発生)、:deprecated(非推奨警告)、true(どちらも行わない)です。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleansとActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleansActive RecordのMySQLアダプタがすべてのtinyint(1)カラムをデフォルトでbooleanと認識するかどうかを指定します。デフォルト値はtrueです。
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tablesPostgreSQLが作成するデータベースを「unlogged」にすべきかどうかを制御します。unloggedにするとパフォーマンスは向上しますが、データベースがクラッシュしたときのデータ喪失リスクも増加します。production環境ではこれを有効にしないことを強くおすすめします。デフォルトではすべての環境でfalseになります。
test環境で有効にするには以下のようにします。
# config/environments/test.rb ActiveSupport.on_load(:active_record_postgresqladapter) do self.create_unlogged_tables = true end
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_typeマイグレーションやスキーマでdatetimeを呼び出したときに、Active RecordのPostgreSQLアダプタが使うネイティブ型を指定します。この設定が受け取るシンボルは、NATIVE_DATABASE_TYPESで設定された内容のいずれかに対応していなければなりません。デフォルト値は:timestampで、この場合マイグレーション内のt.datetimeで「タイムゾーンなしのタイムスタンプ」が作成されます。
「タイムゾーンありのタイムスタンプ」を利用するには以下のように設定します。
# config/application.rb ActiveSupport.on_load(:active_record_postgresqladapter) do self.datetime_type = :timestamptz end
ActiveRecord::SchemaDumper.ignore_tables生成されるどのスキーマファイルにも含めたくないテーブル名の配列を渡せます。
ActiveRecord::SchemaDumper.fk_ignore_pattern外部キー名をdb/schema.rbにダンプすべきかどうかを指定する正規表現を変更できます。デフォルトでは、fk_rails_で始まる外部キー名はデータベースのスキーマダンプにエクスポートされません。デフォルト値は/^fk_rails_[0-9a-f]{10}$/です。
config.active_record.encryption.add_to_filter_parametersinspectで暗号化属性を自動フィルタリングで除外するかどうかを指定します。
デフォルト値はtrueです。
config.active_record.encryption.hash_digest_classActive Record Encryptionで利用するダイジェストアルゴリズムを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | OpenSSL::Digest::SHA1 | 
| 7.1以降 | OpenSSL::Digest::SHA256 | 
config.active_record.encryption.support_sha1_for_non_deterministic_encryptionSHA-1ダイジェストクラスを用いて暗号化された既存のデータの復号サポートを有効にします。falseの場合、config.active_record.encryption.hash_digest_classで設定されたダイジェストのみをサポートします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.1以降 | false | 
データベースコネクションをURLで構成する場合、このオプションはプロトコルと背後のデータベースアダプタへのマッピングを提供します。たとえば、環境変数で DATABASE_URL=mysql://localhost/databaseを指定するとRailsはmysqlをmysql2アダプタにマッピングしますが、アプリケーションでこれらのマッピングを以下のようにオーバーライドすることも可能です。
config.active_record.protocol_adapters.mysql = "trilogy"
マッピングが見つからない場合、プロトコルがアダプタ名として使われます。
config.action_controllerには多数の設定が含まれています。
config.action_controller.asset_hostアセットを置くホストを設定します。これは、アセットをホストする場所としてアプリケーションサーバーの代わりにCDN(コンテンツ配信ネットワーク)を使いたい場合に便利です。この設定を使うのは、Action Mailerで別の設定を使う場合だけにとどめてください。それ以外の場合はconfig.asset_hostをお使いください。
config.action_controller.perform_cachingAction Controllerコンポーネントが提供するキャッシュ機能をアプリケーションで使うかどうかを指定します。developmentモードではfalse、productionモードではtrueに設定します。指定のない場合はtrueになります。
config.action_controller.default_static_extensionキャッシュされたページに与える拡張子を指定します。デフォルト値は.htmlです。
config.action_controller.include_all_helpersすべてのビューヘルパーをあらゆる場所で使えるようにするか、対応するコントローラのスコープ内に限定するかを設定します。
falseに設定すると、たとえばUsersHelperはUsersControllerの一部としてレンダリングされるビューでしか使えなくなります。trueに設定すると、このUsersHelperはどこからでも使えるようになります。
デフォルト設定の振る舞い(このオプションにtrueやfalseが明示的に設定されていない場合)は、どのコントローラでもあらゆるビューヘルパーを使えます。
config.action_controller.loggerLog4rのインターフェイスまたはデフォルトのRuby Loggerクラスに従うロガーを引数として取ります。このロガーは、Action Controllerからの情報をログ出力するのに使われます。ログ出力を無効にするにはnilを設定します。
config.action_controller.request_forgery_protection_tokenRequestForgery対策用のトークンパラメータ名を設定します。protect_from_forgeryを呼び出すと、デフォルトで:authenticity_tokenが設定されます。
config.action_controller.allow_forgery_protectionCSRF保護を有効にするかどうかを指定します。testモードではデフォルトでfalseに設定され、それ以外ではtrueに設定されます。
config.action_controller.forgery_protection_origin_checkCSRFの追加対策として、HTTPのOriginヘッダーがサイトのoriginと一致することをチェックすべきかどうかを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.0以降 | true | 
config.action_controller.per_form_csrf_tokensCSRFトークンの正当性をそれらが生成されたメソッドやアクションに対してのみ認めるかどうかを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.0以降 | true | 
config.action_controller.default_protect_from_forgeryフォージェリ保護をActionController:Baseに追加するかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.2以降 | true | 
config.action_controller.relative_url_rootサブディレクトリへのデプロイを行っていることをRailsに指示するのに使えます。デフォルト値はconfig.relative_url_rootです。
config.action_controller.permit_all_parametersマスアサインメント(mass assignment)されるすべてのパラメータをデフォルトで許可することを設定します。デフォルト値はfalseです。
config.action_controller.action_on_unpermitted_parameters明示的に許可されていないパラメータが見つかった場合にログ出力または例外発生を行なうかどうかを指定します。test環境とdevelopment環境でのデフォルト値は:logであり、それ以外の環境ではfalseが設定されます。以下の値を指定できます。
false: 何もしない:log: ActiveSupport::Notifications.instrumentイベントをunpermitted_parameters.action_controllerで発火し、DEBUGレベルでログ出力する:raise: ActionController::UnpermittedParameters例外をraiseするconfig.action_controller.always_permitted_parametersデフォルトで許可される許可リストパラメータのリストを設定します。デフォルト値は ['controller', 'action']です。
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]
config.action_controller.raise_on_missing_callback_actionsコールバックの:onlyオプションや:exceptオプションで指定したアクションがコントローラ内に存在しない場合にAbstractController::ActionNotFoundをraiseするかどうかを指定します。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1 | true(developmentとtest)、false(その他の環境) | 
config.action_controller.raise_on_open_redirects外部リダイレクトをオプトインにすることで、アプリケーションが意図せずに外部ホストにリダイレクトされること (オープンリダイレクト(open redirect)とも呼ばれます) から保護します。
この設定がtrueの場合、外部ホストを含むURLがredirect_toに渡されると、ActionController::Redirecting::UnsafeRedirectErrorが発生します。オープンリダイレクトを許可する必要がある場合は、redirect_to呼び出しにallow_other_host: trueオプションを追加できます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
config.action_controller.log_query_tags_around_actionsクエリタグのコントローラコンテキストがaround_filterで更新されるかどうかを指定します。デフォルト値はtrueです。
config.action_controller.wrap_parameters_by_defaultRails 7.0より前は、新しいアプリケーションを生成するときに、JSONリクエスト用にActionController::Baseでパラメータのラッピングを有効にするwrap_parameters.rbという名前のイニシャライザが生成されていました。
この設定値をtrueにすると、そのイニシャライザがある場合と同じ振る舞いになるので、パラメータのラッピング動作をカスタマイズしない場合、アプリケーションのイニシャライザを削除できるようになります。
この値に関係なく、アプリケーションはイニシャライザで、またはコントローラごとに従来と同様にパラメータのラッピング動作をカスタマイズ可能です。パラメータのラッピングについて詳しくは、ParamsWrapperを参照してください。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
ActionController::Base.wrap_parametersParamsWrapperを設定します。これはトップレベルで呼び出すことも、コントローラで個別に呼び出すこともできます。
config.action_dispatch.cookies_serializercookieで使うシリアライザを指定します。config.active_support.message_serializerと同じ値を渡せますが、:hybridは:json_allow_marshalのエイリアスです。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :marshal | 
| 7.0以降 | :json | 
config.action_dispatch.debug_exception_log_levelリクエスト中にキャッチされない例外をログ出力する際に、ActionDispatch::DebugExceptionsミドルウェアで使うログレベルを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :fatal | 
| 7.1以降 | :error | 
config.action_dispatch.default_headersHTTPヘッダーで使われるハッシュです。このヘッダーはデフォルトですべてのレスポンスに設定されます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) |  | 
| 7.0 |  | 
| 7.1以降 |  | 
config.action_dispatch.default_charsetすべてのレンダリングで使うデフォルトの文字セットを指定します。デフォルト値はnilです。
config.action_dispatch.tld_lengthアプリケーションで使うトップレベルドメイン(TLD) の長さを指定します。デフォルト値は1です。
config.action_dispatch.ignore_accept_headerリクエストのヘッダーを受け付けるかどうかを指定します。デフォルト値はfalseです。
config.action_dispatch.x_sendfile_headerサーバー固有のX-Sendfileヘッダーを指定します。これは、サーバーからの送信を加速するのに有用です。たとえば、X-SendfileをApache向けに設定できます。
config.action_dispatch.http_auth_saltHTTP Authのsalt値(訳注: ハッシュの安全性を強化するために加えられる値)を設定します。デフォルト値は'http authentication'です。
config.action_dispatch.signed_cookie_salt署名済みcookie用のsalt値を設定します。デフォルト値は'signed cookie'です。
config.action_dispatch.encrypted_cookie_salt暗号化済みcookie用のsalt値を設定します。デフォルト値は'encrypted cookie'です。
config.action_dispatch.encrypted_signed_cookie_salt署名暗号化済みcookie用のsalt値を設定します。デフォルト値は'signed encrypted cookie'です。
config.action_dispatch.authenticated_encrypted_cookie_salt認証された暗号化済みcookieのsalt値を設定します。デフォルト値は'authenticated encrypted cookie'です。
config.action_dispatch.encrypted_cookie_cipher暗号化済みcookieに使う暗号化方式を設定します。デフォルト値は"aes-256-gcm"です。
config.action_dispatch.signed_cookie_digest署名済みcookieに使うダイジェスト方式を設定します。デフォルト値は"SHA1"です。
config.action_dispatch.cookies_rotations署名暗号化済みcookieの秘密情報、暗号化方式、ダイジェスト方式のローテーションを行えるようにします。
config.action_dispatch.use_authenticated_cookie_encryption署名暗号化済みcookieでAES-256-GCMまたは旧AES-256-CBC暗号を用いるかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.2以降 | true | 
config.action_dispatch.use_cookies_with_metadatapurposeメタデータを埋め込んだcookieの書き込みを有効にします。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 6.0以降 | true | 
config.action_dispatch.perform_deep_mungeパラメータに対してdeep_mungeメソッドを実行すべきかどうかを指定します。詳細についてはセキュリティガイドを参照してください。デフォルト値はtrueです。
config.action_dispatch.rescue_responsesHTTPステータスに割り当てる例外を設定します。ここには、例外とステータスのペアを指定したハッシュを1つ指定可能です。
# デフォルト値を尊重するために、#[]= または #merge! を使うのがよい config.action_dispatch.rescue_responses['MyAuthenticationError'] = :unauthorized
この設定を観察するにはActionDispatch::ExceptionWrapper.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, 'ActionDispatch::Http::MimeNegotiation::InvalidType' => :not_acceptable, 'ActionController::MissingExactTemplate' => :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に割り当てられます。
config.action_dispatch.cookies_same_site_protectioncookie設定時のSameSite属性のデフォルト値を設定します。nilに設定するとSameSite属性は追加されません。以下のようにprocを渡すことでリクエストに応じてSameSite属性の値を動的に設定できます。
config.action_dispatch.cookies_same_site_protection = ->(request) do :strict unless request.user_agent == "TestAgent" end
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | nil | 
| 6.1以降 | lax | 
config.action_dispatch.ssl_default_redirect_statusActionDispatch::SSLミドルウェア内で、GETリクエストとHEADリクエスト以外のリクエストをHTTPからHTTPSにリダイレクトするときに用いるデフォルトのHTTPステータスコードを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | 307 | 
| 6.1以降 | 308 | 
config.action_dispatch.log_rescued_responsesrescue_responsesで設定されている、処理されなかった例外のログ出力を有効にします。デフォルト値はtrueです。
config.action_dispatch.show_exceptionsconfig.action_dispatch.show_exceptions設定は、リクエストへの応答中にAction Pack(具体的にはActionDispatch::ShowExceptionsミドルウェア)が発生した例外を処理する方法を指定します。
値を:allに設定すると、例外をrescueして対応するエラーページを表示するようにAction Packを構成します。たとえば、Action Packは ActiveRecord::RecordNotFound例外をrescueし、public/404.htmlにあるコンテンツをステータスコード404 Not foundでレンダリングします。
値を:rescueableに設定すると、config.action_dispatch.rescue_responsesリストで定義されている例外についてはrescueし、その他すべてはraiseするようAction Packを構成します。 たとえば、Action PackはActiveRecord::RecordNotFoundをrescueしますが、NoMethodErrorをraiseします。
値を`:noneに設定すると、Action Packがすべての例外をraiseするように構成されます。
:all: すべての例外をエラーページで表示する:rescuable: config.action_dispatch.rescue_responsesで宣言されている例外をエラーページで表示する:none: すべての例外をraiseする| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.1以降 | :all | 
config.action_dispatch.always_write_cookie「cookieが安全でないとマーキングされている場合」や「リクエストがSSL経由で行われている場合」や「リクエストがOnion Serviceに対して行われている場合」にも、リクエストの最後にcookieを書き込むかどうかを指定します。
trueに設定すると、この条件が満たされない場合でもcookieを書き込みます。
デフォルト値は、development環境ではtrue、その他の環境ではfalseです。
ActionDispatch::Callbacks.beforeリクエストより前に実行したいコードブロックを渡します。
ActionDispatch::Callbacks.afterリクエストの後に実行したいコードブロックを渡します。
config.action_viewにも若干の設定があります。
config.action_view.cache_template_loadingリクエストのたびにビューテンプレートを再読み込みするかどうか(キャッシュしないかどうか)を指定します。デフォルト値は!config.enable_reloadingに従います。
config.action_view.field_error_procActive Modelで発生したエラーの表示に使うHTMLジェネレータを指定します。渡したブロックは、Action Viewテンプレートのコンテキスト内で評価されます。デフォルト値は以下のとおりです。
Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }
config.action_view.default_form_builderRailsでデフォルトで使うフォームビルダーを指定します。デフォルト値は、ActionView::Helpers::FormBuilderです。フォームビルダーを初期化処理の後に読み込みたい場合(developmentモードではフォームビルダーがリクエストのたびに再読み込みされます)は、Stringとして渡すこともできます。
config.action_view.loggerLog4rのインターフェイスまたはデフォルトのRuby Loggerクラスに従うロガーを渡せます。このロガーは、Action Viewからの情報をログ出力するために使われます。ログ出力を無効にするにはnilを設定します。
config.action_view.erb_trim_mode特定のERB構文をトリミングするかどうかを指定します。デフォルト値は'-'で、<%= -%>または<%= =%>の場合に末尾スペースを削除して改行します。それ以外の値に設定するとトリミングサポートがオフになります。
config.action_view.frozen_string_literalERBテンプレートを# frozen_string_literal: trueマジックコメント付きでコンパイルすることで、すべての文字列リテラルをfrozenにしてアロケーションを削減します。trueに設定するとすべてのビューで有効になります。
config.action_view.embed_authenticity_token_in_remote_formsフォームでremote: trueを使う場合のauthenticity_tokenのデフォルトの動作を設定します。デフォルトではfalseで、この場合リモートフォームにはauthenticity_tokenフォームが含まれません。これはフォームでフラグメントキャッシュを使っている場合に便利です。
リモートフォームはmetaタグから認証を受け取るので、JavaScriptの動作しないブラウザをサポートしなければならない場合を除いて、トークンの埋め込みは不要です。JavaScriptが動かないブラウザのサポートが必要な場合は、authenticity_token: trueをフォームオプションとして渡すか、この設定をtrueにします。
config.action_view.prefix_partial_path_with_controller_namespace名前空間化されたコントローラでレンダリングされたテンプレートにあるサブディレクトリから、パーシャルを探索するかどうかを指定します。たとえば、Admin::PostsControllerというコントローラがあり、以下のテンプレートを出力するとします。
<%= render @article %>
デフォルト設定はtrueで、その場合/admin/posts/_post.erbにあるパーシャルを使います。この値をfalseにすると、/posts/_post.erbがレンダリングされます。この動作は、PostsControllerなどの名前空間化されていないコントローラでレンダリングした場合と同じです。
config.action_view.automatically_disable_submit_tagクリック時にsubmit_tagを自動的に無効にするかどうかを指定します。デフォルト値はtrueです。
config.action_view.debug_missing_translation訳文の存在しないキーを<span>タグで囲むかどうかを指定します。デフォルト値はtrueです。
config.action_view.form_with_generates_remote_formsform_withでリモートフォームを生成するかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| 5.1 | true | 
| 6.1以降 | false | 
config.action_view.form_with_generates_idsform_withのinputでidを生成するかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.2以降 | true | 
config.action_view.default_enforce_utf8フォームを生成するときに、UTF-8でエンコードされたフォームを古いInternet Explorerで強制送信する隠しタグを付けるかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 6.0以降 | false | 
config.action_view.image_loadingimage_tagヘルパーでレンダリングされた<img>タグのloading属性のデフォルト値を指定します。
たとえば"lazy"を設定すると、image_tagヘルパーでレンダリングされた<img>タグにloading="lazy"が含まれ、画像がビューポートに近づくまで読み込みを遅延するようブラウザに指示します(image_tagにloading: "eager"渡すなどの方法で、画像ごとに挙動を上書きできます)。デフォルト値はnilです。
config.action_view.image_decodingimage_tagヘルパーでレンダリングされる<img>タグのdecoding属性に使うデフォルト値を指定します。デフォルト値はnilです。
config.action_view.annotate_rendered_view_with_filenamesレンダリングされたビューにテンプレートファイル名を追加するかどうかを指定します。デフォルト値はfalseです。
config.action_view.preload_links_headerjavascript_include_tagやstylesheet_link_tagで、アセットをプリロードするlinkヘッダーを生成するかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | nil | 
| 6.1以降 | true | 
config.action_view.button_to_generates_button_tagfalseに設定すると、button_toがコンテンツの受け渡し方法に応じて<form>内に<button>要素または<input>要素のどちらかをレンダリングします(以下は簡潔にするために<form>を省略)。
<%= button_to "Content", "/" %> # => <input type="submit" value="Content"> <%= button_to "/" do %> Content <% end %> # => <button type="submit">Content</button>
trueに設定すると、button_toは上のどちらの場合も<form>内に<button>タグを生成します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
config.action_view.apply_stylesheet_media_defaultmedia属性が提供されていない場合に、stylesheet_link_tagでmedia属性のデフォルト値をscreenとしてレンダリングするかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | true | 
| 7.0以降 | false | 
config.action_view.prepend_content_exfiltration_preventionform_tagヘルパーとbutton_toヘルパーが、HTMLをブラウザセーフにする (ただし技術的には無効な) HTMLタグをHTMLの冒頭で生成するかどうかを決定します。このHTMLタグは、先行する「閉じていないタグ」がそのHTMLタグの内容をキャプチャできないことを保証します。デフォルト値はfalseです。
config.action_view.sanitizer_vendorAction Viewで利用されるHTMLサニタイザのセットを設定するには、ActionView::Helpers::SanitizeHelper.sanitizer_vendorを設定します。デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | マークアップの解釈 | 
|---|---|---|
| (オリジナル) | Rails::HTML4::Sanitizer | HTML4 | 
| 7.1以降 | Rails::HTML5::Sanitizer(以下の注を参照) | HTML5 | 
Rails::HTML5::SanitizerはJRubyではサポートされないため、JRubyプラットフォームのRailsではRails::HTML4::Sanitizerにフォールバックします。
config.action_mailboxには以下の設定オプションがあります。
config.action_mailbox.loggerAction Mailboxで用いるロガーを含みます。Log4rまたはデフォルトのRuby Loggerクラスに従うロガーを渡せます。デフォルト値はRails.loggerです。
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
config.action_mailbox.incinerate_afterActiveSupport::Durationを受け取ります。これはActionMailbox::InboundEmailレコードを処理後に自動的に破棄(destroy)するまでの期間を指定します。デフォルト値は30.daysです。
# 受信メールの処理後、14日後に「焼却」する config.action_mailbox.incinerate_after = 14.days
config.action_mailbox.queues.incineration焼却(incinerate)ジョブに用いるActive Jobキューを示すシンボルを渡せます。このオプションがnilの場合、焼却ジョブがデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :action_mailbox_incineration | 
| 6.1以降 | nil | 
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 | 
config.action_mailbox.storage_serviceメールのアップロードに使うActive Storageサービスを示すシンボルで指定します。このオプションがnilの場合、メールがデフォルトのActive Storageサービスにアップロードされます(config.active_storage.serviceを参照)。
config.action_mailerには多数の設定オプションがあります。
config.action_mailer.asset_hostメーラーで用いるアセットのホストを指定します。アプリケーションサーバーではなくCDNにアセットをホスティングする場合に便利です。この設定はAction Controllerで異なるアセットホストを設定する場合にのみ使います。それ以外の場合はconfig.asset_hostをお使いください。
config.action_mailer.loggerLog4rのインターフェイスまたはデフォルトのRuby Loggerクラスに従うロガーを引数として取ります。このロガーは、Action Mailerからの情報をログ出力するために使われます。ログ出力を無効にするにはnilを設定します。
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: SMTP over direct TLS connection)を有効にします。:open_timeout: コネクション開始の試行中の待ち時間を秒で指定します。:read_timeout: read(2)呼び出しのタイムアウトを秒で指定します。また、Mail::SMTPをサポートする任意の設定オプションも渡せます。
config.action_mailer.smtp_timeoutバージョン2.8.0より前のmail gemは、SMTPリクエストにデフォルトのタイムアウトを設定していませんでした。この設定を使うことで、アプリケーションでmail gemの:open_timeoutと:read_timeoutの両方についてデフォルト値を設定してリクエストが無期限に停止しないようにできます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | nil | 
| 7.0以降 | 5 | 
config.action_mailer.sendmail_settings:sendmailの詳細な配信方法を設定できます。引数に渡すオプションハッシュには、以下のオプションを含められます。
:location - sendmail実行ファイルの場所。デフォルト値は/usr/sbin/sendmailです。:arguments - コマンドラインに与える引数。デフォルト値は%w[ -i ]です。config.action_mailer.file_settings:file配信方法を設定します。以下を含むオプションハッシュを渡せます。
:location: ファイルの保存場所(デフォルトは"#{Rails.root}/tmp/mails")。:extension: ファイル拡張子(デフォルトは空文字列)。config.action_mailer.raise_delivery_errorsメール配信が完了しなかった場合にエラーを発生させるかどうかを指定します。デフォルト値はtrueです。
config.action_mailer.delivery_methodメール配信方法を指定します。デフォルト値は:smtpです。詳しくはAction Mailerガイドを参照してください。
config.action_mailer.perform_deliveriesメールを実際に配信するかどうかを指定します。デフォルト値はtrueです。テスト時にメール送信を抑制するのに便利です。
config.action_mailer.default_optionsAction Mailerのデフォルトを設定します。これは、メーラーごとにfromやreply_toなどを設定します。デフォルト値は以下のとおりです。
{ mime_version: "1.0", charset: "UTF-8", content_type: "text/plain", parts_order: ["text/plain", "text/enriched", "text/html"] }
ハッシュを1つ指定してオプションを追加することもできます。
config.action_mailer.default_options = { from: "noreply@example.com" }
config.action_mailer.observersメールを配信したときに通知を受けるオブザーバーを登録します。
config.action_mailer.observers = ["MailObserver"]
config.action_mailer.interceptorsメールを送信する前に呼び出すインターセプタを登録します。
config.action_mailer.interceptors = ["MailInterceptor"]
config.action_mailer.preview_interceptorsメールのプレビュー前に呼び出すインターセプタを登録します。
config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
config.action_mailer.preview_pathsメーラープレビューの置き場所を指定します。この設定オプションにパスを追加すると、メーラープレビューの探索でそのパスが使われるようになります。
config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
config.action_mailer.show_previewsメーラーのプレビューを有効または無効にします。デフォルトではdevelopment環境でtrueです。
config.action_mailer.show_previews = false
config.action_mailer.perform_cachingメーラーテンプレートがフラグメントキャッシングを行うかどうかを指定します。無指定の場合、デフォルトはtrueとなります。
config.action_mailer.deliver_later_queue_nameデフォルトの配信ジョブ (config.action_mailer.delivery_jobを参照)で用いるActive Jobキューを指定します。
このオプションをnilに設定すると、配送ジョブはデフォルトの Active Jobキュー (config.active_job.default_queue_nameを参照)に送信されます。
メーラークラスはこれをオーバーライドすることで別のキューを利用できます。これはデフォルトの配信ジョブを使う場合にのみ適用されることに注意してください。メーラーがカスタムジョブを使っている場合、そのキューが使われます。
Active Jobアダプタも指定されたキューを処理するように設定されていることを確認してください。そうでない場合、配信ジョブが何も知らせずに無視する可能性があります。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :mailers | 
| 6.1以降 | nil | 
config.action_mailer.delivery_jobメールの配信ジョブを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | ActionMailer::MailDeliveryJob | 
| 6.0以降 | "ActionMailer::MailDeliveryJob" | 
Active Supportにもいくつかの設定オプションがあります。
config.active_support.bareRails起動時にactive_support/allの読み込みを行なうかどうかを指定します。デフォルト値はnilであり、この場合active_support/allが読み込まれます。
config.active_support.test_orderテストケースの実行順序を指定します。:randomか:sortedを指定可能で、デフォルト値は:randomです。
config.active_support.escape_html_entities_in_jsonJSONシリアライズに含まれるHTMLエンティティをエスケープするかどうかを指定します。デフォルト値はtrueです。
config.active_support.use_standard_json_time_format日付のシリアライズをISO 8601フォーマットで行うかどうかを指定します。デフォルト値はtrueです。
config.active_support.time_precisionJSONエンコードされた時間値の精度を指定します。デフォルト値は3桁です。
config.active_support.hash_digest_class重要でないダイジェスト(ETagヘッダーなど)の生成に用いるダイジェスト用クラスを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | OpenSSL::Digest::MD5 | 
| 5.2 | OpenSSL::Digest::SHA1 | 
| 7.0以降 | OpenSSL::Digest::SHA256 | 
config.active_support.key_generator_hash_digest_class暗号化済みcookieなどで設定済みのsecretベースを元にして、secretを導出するのに用いるダイジェスト用クラスを設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | OpenSSL::Digest::SHA1 | 
| 7.0以降 | OpenSSL::Digest::SHA256 | 
config.active_support.use_authenticated_message_encryptionAES-256-CBCの代わりに、AES-256-GCM認証済み暗号をメッセージ暗号化のデフォルト暗号化方式として用いるかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.2以降 | true | 
config.active_support.message_serializerActiveSupport::MessageEncryptorおよびActiveSupport::MessageVerifierインスタンスで利用するデフォルトのシリアライザを指定します。シリアライザ間の移行を容易にするため、提供されるシリアライザには複数のデシリアライズ形式をサポートするフォールバックメカニズムが組み込まれています。
| シリアライザ | シリアライズとデシリアライズ | デシリアライズのフォールバック | 
|---|---|---|
| :marshal | Marshal | ActiveSupport::JSON、ActiveSupport::MessagePack | 
| :json | ActiveSupport::JSON | ActiveSupport::MessagePack | 
| :json_allow_marshal | ActiveSupport::JSON | ActiveSupport::MessagePack、Marshal | 
| :message_pack | ActiveSupport::MessagePack | ActiveSupport::JSON | 
| :message_pack_allow_marshal | ActiveSupport::MessagePack | ActiveSupport::JSON、Marshal | 
Marshalは、メッセージ署名のsecret(秘密情報)が漏洩した場合にデシリアライズ攻撃のベクタになる可能性があります。可能であれば、Marshalをサポートしていないシリアライザを選択すること。
:message_packおよび:message_pack_allow_marshalシリアライザは、JSONではサポートされていないSymbolなどの一部のRubyの型を双方向変換できます。また、パフォーマンスの向上やペイロードサイズの縮小も提供します。ただし、msgpack gemが必要です。
上記のシリアライザーは、代替のデシリアライズ形式にフォールバックする際にmessage_serializer_fallback.active_supportというイベント通知を出力します。これにより、そのようなフォールバックがどれくらい頻繁に発生しているかをトラッキングできます。
または、dumpメソッドとloadメソッドに応答するシリアライザオブジェクトを以下のように指定することも可能です。
config.active_support.message_serializer = YAML
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :marshal | 
| 7.1以降 | :json_allow_marshal | 
config.active_support.use_message_serializer_for_metadatatrueに設定すると、メッセージデータとメタデータを一緒にシリアライズするときのパフォーマンスの最適化を有効にします。これによりメッセージのフォーマットが変更されるため、この方法でシリアライズされたモデルは古いバージョンのRails(< 7.1)では読み込めなくなります。
ただし、この最適化が有効かどうかにかかわらず、古い形式を使用するメッセージは引き続き読み込めます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_support.cache_format_versionキャッシュで使うシリアライズ形式を指定します。利用可能な値は7.0、7.1です。
7.1にすると、キャッシュエントリのシリアライズの効率が向上します。
7.1では、効率が向上するとともに、キャッシュエントリの値をデシリアライズせずにキャッシュエントリの期限切れやバージョンミスマッチを検出可能になります。また、ビューフラグメントなどのベアストリング値も最適化されます。
どの形式も前方互換性と後方互換性があります。つまり、ある形式で書かれたキャッシュエントリは別の形式で読み取り可能です。この振る舞いによって、キャッシュ全体を無効化せずに異なる形式間の移行を楽に行えるようになります。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| 7.0 | 7.0 | 
| 7.1以降 | 7.1 | 
config.active_support.deprecation非推奨警告メッセージの振る舞いを設定します。指定可能なオプションについてはDeprecation::Behaviorを参照してください。
デフォルトで生成されるconfig/environments以下のファイルでは、development環境では:logが、test環境では:stderrがそれぞれ設定されます。production環境ではこの設定は省略されており、config.active_support.report_deprecationsの設定が使われます。
config.active_support.disallowed_deprecation利用が許されない非推奨警告メッセージの振る舞いを設定します。指定可能なオプションについてはDeprecation::Behaviorを参照してください。
デフォルトで生成されるconfig/environments以下のファイルでは、development環境とtest環境では:raiseが設定されます。production環境ではこの設定は無視され、config.active_support.report_deprecationsの設定が使われます。
config.active_support.disallowed_deprecation_warningsアプリケーションで利用を許可しない項目として扱う非推奨警告メッセージを設定します。これを用いて、たとえば特定の非推奨項目を重大な失敗として扱えるようになります。
config.active_support.report_deprecationsfalseに設定すると、アプリケーションのdeprecatorsからのすべての非推奨警告メッセージ(利用が許されない非推奨項目も含めて)を停止できます。停止の対象には、Railsや他のgemのdeprecatorをdeprecatorのコレクションに追加可能なすべての非推奨警告が含まれますが、ActiveSupport::Deprecationから発せられる非推奨警告については停止できないものもあります。
デフォルトで生成されるconfig/environments以下のファイルのうち、production環境ではfalseに設定されます。
config.active_support.isolation_levelRails内部ステートのほとんどの局所性(locality)を設定します。Fiberベースのサーバーやジョブプロセッサ(falconなど)を使う場合は、:fiberを設定してください。
それ以外の場合は局所性を:threadにするのが最適です。デフォルトは:threadです。
config.active_support.executor_around_test_caseテストケースをラップするRails.application.executor.wrapを呼び出すように設定します。これにより、テストケースの振る舞いが実際のリクエストやジョブに近づきます。Active Recordクエリキャッシュや非同期クエリのような、通常のテストで無効にされる多くの機能が有効になります。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
ActiveSupport::Logger.silencerfalseに設定すると、ブロック内でのログ出力を抑制する機能がオフになります。デフォルト値はtrueです。
ActiveSupport::Cache::Store.loggerキャッシュストア操作で使うロガーを指定します。
ActiveSupport.to_time_preserves_timezoneto_timeメソッドでレシーバのUTCオフセットを保持するかどうかを指定します。falseの場合、to_timeメソッドはローカルシステムのUTCオフセットに変換されます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 5.0以降 | true | 
ActiveSupport.utc_to_local_returns_utc_offset_timesActiveSupport::TimeZone.utc_to_localで、そのオフセットを考慮したUTC時間ではなく、UTCオフセット付きのローカル時間を返すように設定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 6.1以降 | true | 
config.active_support.raise_on_invalid_cache_expiration_timeRails.cacheのfetchまたはwriteに無効なexpires_atまたは expires_in時刻を指定した場合に、ArgumentErrorを発生させるかどうかを指定します。
オプションはtrueとfalseです。
falseの場合、例外はhandledとして報告され、代わりにログに出力されます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.1以降 | true | 
config.active_jobでは以下の設定オプションが利用できます。
config.active_job.queue_adapterキューのバックエンドに用いるアダプタを設定します。デフォルトのアダプタは:asyncです。最新の組み込みアダプタについてはAPIドキュメントActiveJob::QueueAdaptersを参照してください。
# 必ずGemfileにアダプタのgemを追加し、 # アダプタ固有のインストール/デプロイ方法に従うこと config.active_job.queue_adapter = :sidekiq
config.active_job.default_queue_nameデフォルトのキュー名を変更できます。デフォルト値は"default"です。
config.active_job.default_queue_name = :medium_priority
config.active_job.queue_name_prefixすべてのジョブ名の前に付けられるプレフィックスを設定します(スペースは含めません)。デフォルト値は空欄なので何も追加されません。
以下の設定では、production実行時に指定のジョブがproduction_high_priorityキューに送信されます。
config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base queue_as :high_priority #.... end
config.active_job.queue_name_delimiterデフォルト値は'_'です。queue_name_prefixが設定されている場合は、プレフィックスされていないキュー名とプレフィックスの結合にqueue_name_delimiterが使われます。
以下の設定では、指定のジョブがvideo_server.low_priorityキューに送信されます。
# この区切り文字を使うにはprefixを設定しなければならない config.active_job.queue_name_prefix = 'video_server' config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base queue_as :low_priority #.... end
config.active_job.enqueue_after_transaction_commitActive Jobの#perform_laterおよび同様のメソッドが、現在のActive Recordトランザクションがコミットされた後にジョブのキューイングを自動的に遅延実行(defer)するかどうかを制御します。
設定可能な値:
:never: エンキューを遅延しない:always: エンキューを常に遅延する:default: キューアダプタで振る舞いを定義するActive JobバックエンドがActive Recordと同じデータベースをキューとして利用する場合、通常は遅延実行を防止する必要があります。その他のバックエンドでは遅延実行を許可する必要があります。
例:
Topic.transaction do topic = Topic.create(title: "New Topic") NewTopicNotificationJob.perform_later(topic) end
上の例では、:neverに設定されている場合、Topicがまだコミットされていないにもかかわらず、ジョブはすぐにエンキューされます。
このため、ジョブがほぼ直後に取得された場合や、何らかの理由でトランザクションが成功しなかった場合は、ジョブはデータベースでこのトピックを見つけられなくなります。
:alwaysに設定されている場合、ジョブはトランザクションがコミットされた後に実際にエンキューされます。トランザクションがロールバックした場合は、ジョブはエンキューされません。
この設定は、ジョブクラスごとに設定することも可能です。
class SomeJob < ApplicationJob self.enqueue_after_transaction_commit = :never end
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :never | 
| 7.2 | :default | 
config.active_job.loggerActive Jobのログ情報に使うロガーとして、Log4rのインターフェイスに準拠したロガーか、デフォルトのRubyロガーを指定できます。このロガーは、Active JobのクラスかActive Jobのインスタンスでloggerを呼び出すことで取り出せます。ログ出力を無効にするにはnilを設定します。
config.active_job.custom_serializersカスタムの引数シリアライザを設定できます。デフォルト値は[]です。
config.active_job.log_argumentsジョブの引数をログに出力するかどうかを指定します。デフォルト値はtrueです。
config.active_job.verbose_enqueue_logsバックグラウンドジョブをエンキューするメソッドのソースコードの場所を、関連するエンキューログ行の下にログ出力するかどうかを指定します。
デフォルトは、development環境ではtrue、それ以外の環境ではfalseです。
config.active_job.retry_jitter失敗したジョブをリトライするときに算出する遅延時間に加えるジッター(jitter: ランダムな微変動値)の総量を指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | 0.0 | 
| 6.1以降 | 0.15 | 
config.active_job.log_query_tags_around_performクエリタグのジョブコンテキストがaround_performで自動的に更新されるようにするかどうかを指定します。デフォルト値はtrueです。
config.action_cable.urlAction CableサーバーがホストされているURLを文字列で指定します。Action Cableサーバーがメインのアプリケーションと別になっている場合に使う可能性があります。
config.action_cable.mount_pathAction Cableをメインサーバープロセスの一部としてマウントする場所を文字列で指定します。デフォルト値は/cableです。nilを設定すると、Action Cableは通常のRailsサーバーの一部としてマウントされなくなります。
設定オプションについて詳しくは、Action Cableの概要を参照してください。
config.action_cable.precompile_assetsAction Cableのアセットをアセットパイプラインのプリコンパイルに追加するかどうかを指定します。Sprocketsを使っていない場合、この設定は影響しません。デフォルト値はtrueです。
config.active_storageでは以下の設定オプションが提供されています。
config.active_storage.variant_processor:mini_magickまたは:vipsいずれかのシンボルを渡せます。これらはvariantの変換やblob解析にMiniMagickとruby-vipsのどちらを使うかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | :mini_magick | 
| 7.0以降 | :vips | 
config.active_storage.analyzersActive Storageのblob(binary large object)で利用できるアナライザを指定するクラスの配列を受け取ります。デフォルトでは以下のように定義されます。
config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]
画像アナライザは、画像blobの幅(width)や高さ(height)を取り出せます。
動画アナライザは、動画blobの幅(width)、高さ(height)、再生時間(duration)、角度(angle)、縦横比(aspect ratio、アスペクト比)、動画/音声チャンネルの有無を取り出せます。
音声アナライザは、音声blobの再生時間やビットレートを取り出せます。
config.active_storage.previewersActive Storageのblobで利用できる画像プレビューアを指定するクラスを配列で受け取ります。デフォルトでは以下のように定義されます。
config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
PopplerPDFPreviewerとMuPDFPreviewerはPDF blobの最初のページのサムネイルを生成できます。
VideoPreviewerは動画blobのフレームの中から動画の内容を代表するフレームを生成できます。
config.active_storage.pathsプレビューアやアナライザのコマンドがあるディレクトリを示すオプションをハッシュで受け取ります。デフォルトの{}の場合、コマンドをデフォルトパスで探索します。オプションには以下を含められます。
:ffprobe: ffprobe実行ファイルの場所:mutool: mutool実行ファイルの場所:ffmpeg: ffmpeg実行ファイルの場所config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
config.active_storage.variable_content_typesActive Storageがvariantプロセッサで変換可能なContent-Typeを示す文字列を配列で受け取ります。デフォルトでは以下のように定義されます。
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)
config.active_storage.web_image_content_typesvariantをフォールバック用のPNGフォーマットに変換せずに処理可能なWeb画像Content-Typeを示す文字列を配列で受け取ります。
たとえば、アプリケーションのバリアント処理にAVIFを使いたい場合は、この配列にimage/avifを追加できます。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | %w(image/png image/jpeg image/gif) | 
| 7.0以降 | %w(image/png image/jpeg image/gif image/webp) | 
config.active_storage.content_types_to_serve_as_binaryActive Storageが常に添付ファイルとして扱うContent-Typeを示す文字列を配列で受け取ります。デフォルトでは以下のように定義されます。
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)
config.active_storage.content_types_allowed_inlineActive Storageでインライン配信を許可するContent-Typeを示す文字列を配列で受け取ります。デフォルトでは以下のように定義されます。
config.active_storage.content_types_allowed_inline = %w(image/webp image/avif image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
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 | 
config.active_storage.queues.mirrorダイレクトアップロードのミラーリングジョブに用いるActive Jobキューをシンボルで指定します。このオプションがnilの場合、ミラーリングジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルト値はnilです。
config.active_storage.queues.preview_image画像プレビューの前処理に用いるActive Jobキューをシンボルで指定します。このオプションがnilの場合、ジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルト値はnilです。
config.active_storage.queues.purgepurgeジョブに用いるActive Jobキューをシンボルで指定します。このオプションがnilの場合、purgeジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| 6.0 | :active_storage_purge | 
| 6.1以降 | nil | 
config.active_storage.queues.transformバリアントの前処理に用いるActive Jobキューをシンボルで指定します。このオプションがnilの場合、ジョブはデフォルトのActive Jobキューに送信されます(config.active_job.default_queue_nameを参照)。デフォルト値はnilです。
config.active_storage.loggerActive Storageで用いられるロガーを設定できます。Log4rのインターフェイスに沿ったロガーや、デフォルトのRuby Loggerクラスを指定できます。
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
config.active_storage.service_urls_expire_in以下によって生成されるURLのデフォルトの有効期限を指定します。
ActiveStorage::Blob#urlActiveStorage::Blob#service_url_for_direct_uploadActiveStorage::Preview#urlActiveStorage::Variant#urlデフォルト値は5分間です。
config.active_storage.urls_expire_inActive Storageで生成される、Railsアプリケーション内URLのデフォルトの有効期限を指定します。デフォルト値はnilです。
config.active_storage.touch_attachment_records対応するレコードを更新時にtouchするようにActiveStorage::Attachmentsに指示します。デフォルトはtrueです。
config.active_storage.routes_prefixActive Storageが提供するルーティングのプレフィックスを設定できます。生成されるルーティングの冒頭に追加する文字列を渡せます。
config.active_storage.routes_prefix = '/files'
デフォルト値は/rails/active_storageです。
config.active_storage.track_variantsvariantをデータベースに記録するかどうかを指定します。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 6.1以降 | true | 
config.active_storage.draw_routesActive Storageのルーティング生成をオンオフできます。デフォルト値はtrueです。
config.active_storage.replace_on_assign_to_many(準備中)
config.active_storage.resolve_model_to_routeActive Storageのファイル配信方法をグローバルに変更できます。
利用可能な値は以下です。
:rails_storage_redirect: 署名済みの短命なサービスURLにリダイレクトする:rails_storage_proxy: プロキシファイルでダウンロードするデフォルト値は:rails_storage_redirectです。
config.active_storage.video_preview_argumentsffmpegの動画プレビュー画像生成方法を変更できます。
デフォルト値は、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"
 | 
config.active_storage.multiple_file_field_include_hiddenRails 7.1以降、Active Storageのhas_many_attachedリレーションシップは、デフォルトで現在のコレクションに追加されるのではなく、デフォルトで現在のコレクションを置き換えるようになる予定です。
「空の」コレクションの送信をサポートするために、このmultiple_file_field_include_hiddenがtrueの場合はfile_fieldヘルパーが補助的な隠しフィールドをレンダリングするようになります。これは、check_boxヘルパーで補助フィールドをレンダリングするのと似ています。
デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
config.active_storage.precompile_assetsアセットパイプラインのプリコンパイルにActive Storageアセットを追加するかどうかを指定します。Sprocketsを使っていない場合は、この設定は影響しません。デフォルト値はtrueです。
config.action_text.attachment_tag_name添付ファイルをラップするHTMLタグを文字列で指定します。デフォルト値は"action-text-attachment"です。
config.action_text.sanitizer_vendorAction Textで利用するHTMLサニタイザを設定します。ActionText::ContentHelper.sanitizerには、ベンダーの.safe_list_sanitizerメソッドから返されるクラスのインスタンスが設定されます。デフォルト値は、config.load_defaultsのターゲットバージョンによって異なります。
| バージョン | デフォルト値 | 
|---|---|
| (オリジナル) | false | 
| 7.0以降 | true | 
| バージョン | デフォルト値 | マークアップ解析ライブラリ | 
|---|---|---|
| (オリジナル) | Rails::HTML4::Sanitizer | HTML4 | 
| 7.1 | Rails::HTML5::Sanitizer(以下の注を参照) | HTML5 | 
Rails::HTML5::SanitizerはJRubyではサポートされていないため、JRubyプラットフォームのRailsはRails::HTML4::Sanitizerにフォールバックします。
ほぼすべての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のコードとして評価されます。このタグを用いて、環境変数から接続情報を取り出したり、接続情報の生成に必要な計算を行なうことも可能です。
config/database.ymlファイルでENV['DATABASE_URL']またはurlキーを使うと、RailsはURL内のプロトコルを、アプリケーション内から設定可能なデータベースアダプタにマッピングできます。これにより、デプロイ先の環境で設定されるURLを変更せずにアダプタを設定可能になります。詳しくはconfig.active_record.protocol_adaptersを参照してください。
データベースの接続設定を手動で更新する必要はありません。アプリケーションのジェネレータのオプションを表示してみると、--databaseというオプションがあるのがわかります。このオプションでは、リレーショナルデータベースで最もよく使われるアダプタをリストから選択できます。さらに、cd .. && rails new blog --database=mysqlのようにジェネレータを繰り返し実行することも可能です。config/database.ymlファイルが上書きされたことを確認すれば、アプリケーションの設定はSQLite用からMySQL用に変更されます。よく使われるデータベース接続方法の詳しい例については後述します。
データベース接続の設定方法は、config/database.ymlによる方法と環境変数による方法の2とおりがあります。この2つがどのように相互作用するかを理解しておくことが重要です。
config/database.ymlファイルの内容が空で、かつ環境変数ENV['DATABASE_URL']が設定されている場合、データベースへの接続には環境変数が使われます。
$ cat config/database.yml $ echo $DATABASE_URL postgresql://localhost/my_database
config/database.ymlファイルがあり、環境変数ENV['DATABASE_URL']が設定されていない場合は、config/database.ymlファイルがデータベース接続に使われます。
$ cat config/database.yml development: adapter: postgresql database: my_database host: localhost $ echo $DATABASE_URL
config/database.ymlファイルと環境変数ENV['DATABASE_URL']が両方存在する場合、両者の設定はマージして使われます。以下のいくつかの例を参照して理解を深めてください。
提供された接続情報が重複している場合、環境変数が優先されます。
$ 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.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.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"> ]
poolはENV['DATABASE_URL']で提供される情報に含まれていないので、マージされています。adapterは重複しているので、ENV['DATABASE_URL']の接続情報が優先されています。
ENV['DATABASE_URL']の情報よりもdatabase.ymlの情報を優先する唯一の方法は、database.ymlで"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.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を記述できるので、database.yml内で明示的にENV['DATABASE_URL']を使うのが最もよい方法です。これは特にproduction環境で有用です。理由は、データベース接続のパスワードのような秘密情報をGitなどのソースコントロールに直接登録すべきではないからです。
$ cat config/database.yml production: url: <%= ENV['DATABASE_URL'] %>
以上の説明で動作が明らかになりました。接続情報は決してdatabase.ymlに直接書かず、常にENV['DATABASE_URL']に保存したものを利用してください。
RailsにはSQLite3のサポートが組み込まれています。SQLiteは軽量かつ専用サーバーの不要なデータベースアプリケーションです。SQLiteは、production環境の負荷に耐えるよう、より適切に設定されますが、production環境の負荷が高すぎる場合はSQLiteが過負荷になる可能性があります。Railsで新規プロジェクトを作成するとデフォルトでSQLiteが指定されますが、これはいつでも後から変更できます。
以下はデフォルトの接続設定ファイル(config/database.yml)に含まれる、開発環境用の接続設定です。
development: adapter: sqlite3 database: storage/development.sqlite3 pool: 5 timeout: 5000
Railsでデータ保存用にSQLite3データベースが採用されている理由は、設定なしですぐに使えるからです。RailsではSQLiteの他にMySQL(MariaDB含む)やPostgreSQLなども使えますし、データベース接続用のプラグインも多数あります。production環境で何らかのデータベースを使う場合、そのためのアダプタはたいていの場合探せば見つかります。
Rails同梱のSQLite3ではなくMySQLやMariaDBなどを採用する場合、config/database.ymlの記述方法を少し変更します。developmentセクションの記述は以下のようになります。
development: adapter: mysql2 encoding: utf8mb4 database: blog_development pool: 5 username: root password: socket: /tmp/mysql.sock
ユーザー名root、パスワードなしでdevelopment環境のデータベースに接続できれば、上の設定で接続できるはずです。接続できない場合は、developmentセクションのユーザー名またはパスワードを適切なものに変更してください。
MySQLのバージョンが5.5または5.6で、かつutf8mb4文字セットをデフォルトで使いたい場合は、MySQLサーバーでinnodb_large_prefixシステム変数を有効にすることで、長いキープレフィックスがサポートされるよう設定してください。
MySQLのAdvisory Locksはデフォルトで有効になります。これはデータベースマイグレーションの並行処理を安全に実行するために用いられます。advisory_locksをfalseにするとAdvisory Locksを無効にできます。
production: adapter: mysql2 advisory_locks: false
PostgreSQLを採用した場合は、config/database.ymlの記述は以下のようになります。
development: adapter: postgresql encoding: unicode database: blog_development pool: 5
Active Recordでは、Prepared StatementsやAdvisory Locksなどの機能がデフォルトでオンになります。PgBouncerなどの外部コネクションプーラーを用いる場合、これらの機能をオフにできます。
production: adapter: postgresql prepared_statements: false advisory_locks: false
オンにする場合、Active Recordはデフォルトでデータベース接続ごとに最大1000までのPrepared Statementsを作成します。この数値を変更したい場合はstatement_limitに別の数値を指定します。
production: adapter: postgresql statement_limit: 200
Prepared Statementsの利用量を増やすと、データベースで必要なメモリー量も増大します。PostgreSQLデータベースのメモリー利用量が上限に達した場合は、statement_limitの値を小さくするかPrepared Statementsをオフにしてください。
JRuby環境でSQLite3を採用する場合、config/database.ymlの記述方法は少し異なります。developmentセクションは以下のようになります。
development: adapter: jdbcsqlite3 database: storage/development.sqlite3
JRuby環境でMySQLやMariaDBなどを採用する場合、config/database.ymlの記述方法は少し異なります。developmentセクションは以下のようになります。
development: adapter: jdbcmysql database: blog_development username: root password:
JRuby環境でPostgreSQLを採用する場合、config/database.ymlの記述方法は少し異なります。developmentセクションは以下のようになります。
development: adapter: jdbcpostgresql encoding: unicode database: blog_development username: blog password:
developmentセクションのユーザー名とパスワードは適切なものに置き換えてください。
Railsは、自分のRails環境とスキーマに関する情報を、ar_internal_metadataという名前の内部テーブルにデフォルトで保存します。
この機能をコネクションごとにオフにするには、利用するデータベース設定ファイルで以下のようにuse_metadata_tableを設定します。これは、共有データベースで作業する場合や、テーブル作成権限を持たないデータベースユーザーで作業する場合に便利です。
development: adapter: postgresql use_metadata_table: false
デフォルトでは、Railsは何か問題が発生すると自動的にデータベースサーバに再接続し、特定のクエリをリトライ(再試行)します。安全に再試行できる(冪等な)クエリのみが再試行されます。再試行回数はデータベースの設定でconnection_retriesを使って指定するか、値を0に設定して無効にできます。
development: adapter: mysql2 connection_retries: 3
データベース設定ではretry_deadlineを設定できます。
retry_deadlineが設定されると、リトライ可能なクエリが最初に試行されてから指定の時間が経過すると、リトライを行わなくなります。たとえばretry_deadlineを5秒に設定すると、クエリが最初に試行されてから5秒経過すると、たとえそのクエリが冪等かつconnection_retriesが残っていたとしても、クエリを再試行しなくなります。
デフォルト値はnilです。これは、経過時間に関係なく、すべての再試行可能なクエリがリトライされることを意味します。
この設定の値は秒単位で指定する必要があります。
development: adapter: mysql2 retry_deadline: 5 # 5秒経過したらリトライを停止する
デフォルトでは、Railsはクエリによって返される結果セットを自動的にキャッシュします。同じクエリが発生した場合は、データベースへのクエリ実行ではなく、キャッシュされた結果セットを使います。
このクエリキャッシュはメモリ上に保存されており、メモリ使用量を増やしすぎないために、最も使われていないクエリが一定の閾値に達した時点で自動的に削除されます。デフォルトの閾値は100ですが、database.ymlで設定することも可能です。
development: adapter: mysql2 query_cache: 200
クエリキャッシュを完全に無効にするには、以下のようにfalseに設定します。
development: adapter: mysql2 query_cache: false
Railsにデフォルトで備わっている環境は、"development"、"test"、"production"の3つです。通常はこの3つの環境で事足りますが、場合によっては環境を追加したくなることもあると思います。
たとえば、production環境をミラーコピーしたサーバーをテスト目的でのみ使いたいという場合を想定してみましょう。このようなサーバーは通常「ステージングサーバー(staging server)」と呼ばれます。"staging"環境をサーバーに追加したいのであれば、config/environments/staging.rbというファイルを作成するだけで済みます。その際にはなるべくconfig/environmentsにある既存のファイルを流用し、必要な部分のみを変更するようにしてください。
この環境はproductionに近いので、config/environments/production.rbの内容を出発点としてコピーし、そこから必要な変更を加えていけばよいでしょう。また、以下のように他の環境設定をrequireして拡張することも可能です。
# config/environments/staging.rb require_relative "production" Rails.application.configure do # stagingをオーバーライドする end
このようにして追加された環境は、デフォルトの3つの環境と同じように利用できます。rails server -e stagingを実行すればステージング環境でサーバーを起動でき、rails console -e stagingやRails.env.staging?なども動作するようになります。
Railsアプリケーションの実行は、アプリケーションのrootディレクトリ (/など) で行なうことが前提となっています。この節では、アプリケーションをディレクトリの下で実行する方法について説明します。
ここでは、アプリケーションを"/app1"ディレクトリにデプロイしたいとします。これを行なうには、適切なルーティングを生成できるディレクトリをRailsに指示する必要があります。
config.relative_url_root = "/app1"
あるいは、RAILS_RELATIVE_URL_ROOT環境変数に設定することも可能です。
これで、リンクが生成される時に"/app1"がディレクトリ名の前に追加されます。
Passengerを使うと、アプリケーションを手軽にサブディレクトリで実行できます。設定方法について詳しくは、passengerマニュアルを参照してください。
リバースプロキシを用いるアプリケーションをデプロイすることで、従来のデプロイと比べて確実なメリットが得られます。アプリケーションで必要なコンポーネントの層が追加され、サーバーを制御しやすくなります。
現代的なWebサーバーの多くは、キャッシュサーバーやアプリケーションサーバーなどのロードバランシングにプロキシサーバーを用いています。
Unicornは、リバースプロキシの背後で実行されるアプリケーションサーバーの例です。
この場合、NGINXやApacheなどのプロキシサーバーを設定して、アプリケーションサーバー(ここではUnicorn)からの接続を受け付けるようにする必要があります。Unicornは、デフォルトでTCP接続のポート8000をリッスンしますが、このポート番号を変更することも、ソケットを用いるように設定することも可能です。
詳しくはUnicorn readmeを参照し、背後の哲学を理解してください。
アプリケーションサーバーの設定が終わったら、Webサーバーも適切に設定してリクエストのプロキシを行わなければなりません。以下の設定は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;
  }
  # (省略)
}
必ずNGINXのドキュメントで最新情報を参照してください。
一部の設定については、Railsの外部から環境変数の形で与えることも可能です。以下の環境変数は、Railsの多くの部分で認識されます。
ENV["RAILS_ENV"]: Railsが実行される環境 (production、development、testなど) を定義します。
ENV["RAILS_RELATIVE_URL_ROOT"]: アプリケーションをサブディレクトリにデプロイするときにルーティングシステムがURLを認識するために使われます。
ENV["RAILS_CACHE_ID"]とENV["RAILS_APP_VERSION"]: Railsのキャッシュを扱うコードで拡張キャッシュを生成するために使われます。これにより、1つのアプリケーションの中で複数の独立したキャッシュを扱えるようになります。
Railsは、フレームワークの読み込みとすべてのgemの読み込みが完了してから、イニシャライザの読み込みを開始します。イニシャライザとは、アプリケーションのconfig/initializersディレクトリに保存されているRubyファイルのことです。イニシャライザファイルには、フレームワークやgemがすべて読み込まれた後に行いたい設定(フレームワークやgemを設定するオプションなど)を保存できます。
config/initializers(およびconfig/initializersのサブディレクトリ)にあるファイルは、load_config_initializersイニシャライザの一部として、ソートされて1つずつ読み込まれます。
あるイニシャライザのコードが別のイニシャライザのコードに依存する場合、代わりにそれらを1つのイニシャライザーにまとめることが可能です。こうすることで依存関係がより明確になり、アプリケーション内で新しい概念を表面化するのに有用です。Railsは番号を振ったイニシャライザファイル名もサポートしていますが、これはファイル名の乱立につながる可能性があります。requireで明示的にイニシャライザを読み込むとイニシャライザが2回読み込まれるので、おすすめできません。
自分のイニシャライザが、他のすべてのgemのイニシャライザが実行された後で実行されるという保証はありません。そのようなgemに依存する初期化コードは、config.after_initializeブロックに配置してください。
Railsコードは、アプリケーションの読み込み時に頻繁に参照される可能性があります。Railsはこれらのフレームワークの読み込み順序を管理しているので、ActiveRecord::Baseなどのフレームワークを不注意に読み込むと、アプリケーションとRailsとの暗黙の取り決めに違反することになります。さらに、アプリケーションの起動時にActiveRecord::Baseなどのコードを読み込むとフレームワーク全体が読み込まれてしまうため、起動時間が遅くなり、アプリケーションの読み込み順序や起動で競合が発生する可能性があります。
読み込みフックと設定フックは、読み込みに関するRailsの取り決めに違反せずに、この初期化プロセスにフックできるAPIです。これを使うことで、起動時のパフォーマンス低下も軽減され、競合も回避されます。
Rubyは動的言語なので、一部のコードで別のRailsフレームワークが読み込まれてしまうことがあります。以下のスニペットを例に挙げます。
ActiveRecord::Base.include(MyActiveRecordHelper)
上のスニペットは、「このファイルが読み込まれるとActiveRecord::Baseに遭遇する」ことを意味します。これにより、Rubyはその定数の定義を検索してrequireします。これにより、起動時にActive Recordフレームワーク全体が読み込まれてしまいます。
ActiveSupport.on_loadは、本当に必要になるまでコードの読み込みを延期できるメカニズムです。上のスニペットは以下のように変更できます。
ActiveSupport.on_load(:active_record) do include MyActiveRecordHelper end
変更後のスニペットは、ActiveRecord::Baseが読み込まれるときだけMyActiveRecordHelperをincludeします。
Railsフレームワークでは、特定のライブラリが読み込まれたタイミングでこれらのフックが呼び出されます。たとえば、ActionController::Baseが読み込まれると、:action_controller_baseフックが呼び出されます。つまり、:action_controller_baseフックを使うすべてのActiveSupport.on_load呼び出しは、ActionController::Baseのコンテキストで呼び出されることになります(つまり、selfはActionController::Baseになります)。
コードの変更は一般的に簡単です。ActiveRecord::BaseなどのRailsフレームワークを参照するコード行がある場合は、そのコードを読み込みフックでラップできます。
include呼び出しを変更する場合
ActiveRecord::Base.include(MyActiveRecordHelper)
上を以下のように変更します。
ActiveSupport.on_load(:active_record) do # self refers to ActiveRecord::Base here, # so we can call .include include MyActiveRecordHelper end
prepend呼び出しを変更する場合
ActionController::Base.prepend(MyActionControllerHelper)
上を以下のように変更します。
ActiveSupport.on_load(:action_controller_base) do # self refers to ActionController::Base here, # so we can call .prepend prepend MyActionControllerHelper end
クラスメソッド呼び出しを変更する場合
ActiveRecord::Base.include_root_in_json = true
上を以下のように変更します。
ActiveSupport.on_load(:active_record) do # self refers to ActiveRecord::Base here self.include_root_in_json = true end
以下の読み込みフックは独自のコードで利用可能です。以下のクラスのいずれかの初期化プロセスにフックするには、利用可能なフックを使います。
| クラス名 | フック | 
|---|---|
| ActionCable | action_cable | 
| ActionCable::Channel::Base | action_cable_channel | 
| ActionCable::Connection::Base | action_cable_connection | 
| ActionCable::Connection::TestCase | action_cable_connection_test_case | 
| ActionController::API | action_controller_api | 
| ActionController::API | action_controller | 
| ActionController::Base | action_controller_base | 
| ActionController::Base | action_controller | 
| ActionController::TestCase | action_controller_test_case | 
| ActionDispatch::IntegrationTest | action_dispatch_integration_test | 
| ActionDispatch::Response | action_dispatch_response | 
| ActionDispatch::Request | action_dispatch_request | 
| ActionDispatch::SystemTestCase | action_dispatch_system_test_case | 
| ActionMailbox::Base | action_mailbox | 
| ActionMailbox::InboundEmail | action_mailbox_inbound_email | 
| ActionMailbox::Record | action_mailbox_record | 
| ActionMailbox::TestCase | action_mailbox_test_case | 
| ActionMailer::Base | action_mailer | 
| ActionMailer::TestCase | action_mailer_test_case | 
| ActionText::Content | action_text_content | 
| ActionText::Record | action_text_record | 
| ActionText::RichText | action_text_rich_text | 
| ActionText::EncryptedRichText | action_text_encrypted_rich_text | 
| ActionView::Base | action_view | 
| ActionView::TestCase | action_view_test_case | 
| ActiveJob::Base | active_job | 
| ActiveJob::TestCase | active_job_test_case | 
| ActiveModel::Model | active_model | 
| ActiveRecord::Base | active_record | 
| ActiveRecord::TestFixtures | active_record_fixtures | 
| ActiveRecord::ConnectionAdapters::PostgreSQLAdapter | active_record_postgresqladapter | 
| ActiveRecord::ConnectionAdapters::Mysql2Adapter | active_record_mysql2adapter | 
| ActiveRecord::ConnectionAdapters::TrilogyAdapter | active_record_trilogyadapter | 
| ActiveRecord::ConnectionAdapters::SQLite3Adapter | active_record_sqlite3adapter | 
| ActiveStorage::Attachment | active_storage_attachment | 
| ActiveStorage::VariantRecord | active_storage_variant_record | 
| ActiveStorage::Blob | active_storage_blob | 
| ActiveStorage::Record | active_storage_record | 
| ActiveSupport::TestCase | active_support_test_case | 
| i18n | i18n | 
Railsにはフック可能な初期化イベントが5つあります。以下のイベントは、実際に実行される順序で掲載しています。
before_configurationこのフックは、アプリケーションのクラスがconfig/application.rbでRails::Applicationを継承するタイミングで(クラスの本文が実行される前に)実行されます。Railsエンジンは、アプリケーション自身が設定される前に、このフックでコードを実行する場合があります。
before_initializeこのフックは、:bootstrap_hookイニシャライザによる初期化プロセスの直前に直接実行されます。:bootstrap_hookは、Railsアプリケーション初期化プロセスのうち比較的初期の段階で実行されます。
to_prepareこのフックは、Railtiesの初期化処理とアプリケーション自身の初期化処理がすべて完了した後で、かつeager loadingとミドルウェアスタックの構築が行われる前に実行されます。さらに重要な点は、このフックはdevelopmentモードではサーバーへのリクエストのたびに必ず実行されますが、productionモードとtestモードでは起動時に1度しか実行されないことです。
before_eager_loadこのフックは、事前eager loadingの前に直接実行されます。これはproduction環境のデフォルトの動作で、development環境では実行されません。
after_initializeこのフックは、アプリケーションの初期化が完了し、かつconfig/initializers以下のイニシャライザが実行された後に実行されます。
これらのフックでイベントを定義するには、Rails::Application、Rails::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ブロックが呼び出された時点で設定が完了しないものがあります。
Rails::Railtie#initializerRailsには起動時に実行されるさまざまなイニシャライザがあり、それらはすべてRails::Railtieのinitializerメソッドで定義されます。以下はAction Controllerのset_helpers_pathイニシャライザの例です。
initializer "action_controller.set_helpers_path" do |app| ActionController::Helpers.helpers_path = app.helpers_paths end
このinitializerメソッドは3つの引数を取ります。第1引数はイニシャライザ名、第2引数はオプションハッシュ(上の例では使っていません)、そして第3引数はブロックです。
オプションハッシュに含まれる:beforeキーを使うと、新しいイニシャライザより前に実行したいイニシャライザを指定できます。同様に、:afterキーを使うと、このイニシャライザより後に実行したいイニシャライザを指定できます。
initializerメソッドで定義されたイニシャライザは、定義された順序で実行されます(:beforeや:afterを使った場合は除きます)。
イニシャライザの起動順序は、論理的に矛盾が生じない限り、どのイニシャライザの前または後にでも配置可能です。たとえば、"one"〜"four"という4つのイニシャライザがあり、かつこの順序で定義されたとします。ここで"four"を"two"より前かつ"three"よりも後になるように定義すると論理矛盾が発生し、イニシャライザの実行順を決定できなくなってしまいます。
initializerメソッドのブロック引数は、アプリケーション自身のインスタンスです。そのおかげで、上の例で示したように、configメソッドでアプリケーションの設定にアクセスできます。
Rails::ApplicationはRails::Railtieを間接的に継承しているので、config/application.rbでinitializerメソッドを使ってアプリケーションの初期化処理を定義できます。
以下はRailsにあるイニシャライザのリストです。これらは定義された順序で並んでおり、特記事項がない限り実行されます。
load_environment_hookこれはプレースホルダとして使われます。具体的には、:load_environment_configを定義してこのイニシャライザより前に実行したい場合に使います。
load_active_supportActive Supportの基本部分を設定するactive_support/dependenciesをrequireします。config.active_support.bareがない場合はデフォルトでactive_support/allをrequireします。
initialize_loggerここより前の位置にRails.loggerを定義するイニシャライザがない場合、アプリケーションのロガー(ActiveSupport::BroadcastLoggerオブジェクト)を初期化し、Rails.loggerにアクセスできるようにします。
initialize_cacheRails.cacheが未設定の場合、config.cache_storeの値を参照してキャッシュを初期化し、その結果をRails.cacheとして保存します。そのオブジェクトがmiddlewareメソッドに応答する場合、そのミドルウェアをミドルウェアスタックのRack::Runtimeの前に挿入します。
set_clear_dependencies_hookこのイニシャライザは、config.enable_reloadingがtrueの場合にのみ実行され、オブジェクト空間からのリクエスト中に参照された定数をActionDispatch::Callbacks.afterで削除します。これにより、これらの定数が以後のリクエストで再読み込みされるようになります。
bootstrap_hookこのフックはすべての設定済みbefore_initializeブロックを実行します。
i18n.callbacksdevelopment環境の場合、to_prepareコールバックを設定します。このコールバックは、最後にリクエストが発生した後にロケールが変更されるとI18n.reload!を呼び出します。productionモードの場合、このコールバックは最初のリクエストでのみ実行されます。
active_support.deprecation_behavior以下に基づいたRails.application.deprecatorsの非推奨項目レポートをセットアップします。
config.active_support.report_deprecationsconfig.active_support.deprecationconfig.active_support.disallowed_deprecationconfig.active_support.disallowed_deprecation_warningsactive_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し、その値をActive Supportに渡します。
action_dispatch.configureActionDispatch::Http::URL.tld_lengthを構成して、config.action_dispatch.tld_lengthの値(トップレベルドメイン名の長さ)が設定されるようにします。
action_view.set_configsconfig.action_view内の設定を用いてAction Viewをセットアップします。メソッド名をActionView::Baseのセッターとしてsendし、その値をAction Viewに渡します。
action_controller.assets_config明示的に設定されていない場合は、config.action_controller.assets_dirをアプリケーションのpublic/ディレクトリに設定します。
action_controller.set_helpers_pathAction Controllerのhelpers_pathをアプリケーションのhelpers_pathに設定します。
action_controller.parameters_configActionController::Parametersで使うStrong Parametersオプションを設定します。
action_controller.set_configsconfig.action_controller内の設定を用いてAction Controllerをセットアップします。メソッド名をActionController::Baseのセッターとしてsendし、その値をAction Controllerに渡します。
action_controller.compile_config_methods指定された設定用メソッドを初期化し、より高速にアクセスできるようにします。
active_record.initialize_timezoneActiveRecord::Base.time_zone_aware_attributesをtrueに設定し、ActiveRecord::Base.default_timezoneをUTCに設定します。属性がデータベースから読み込まれると、Time.zoneで指定されたタイムゾーンに変換されます。
active_record.loggerActiveRecord::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_configsconfig.active_record内の設定を用いてActive Recordをセットアップします。メソッド名をActiveRecord::Baseのセッターとしてsendし、その値をActive Recordに渡します。
active_record.initialize_databaseデータベース設定をconfig/database.yml(デフォルト)から読み込み、現在の環境でデータベース接続を確立します。
active_record.log_runtimeリクエストでActive Record呼び出しに要した時間をロガーに出力するActiveRecord::Railties::ControllerRuntimeおよびActiveRecord::Railties::JobRuntimeをインクルードします。
active_record.set_reloader_hooksconfig.cache_classesがfalseの場合、再読み込み可能なデータベース接続をすべてリセットします。
active_record.add_watchable_files変更の監視対象ファイルにschema.rbファイルとstructure.sqlファイルを追加します。
active_job.loggerActiveJob::Base.loggerにRails.loggerを設定します(未設定の場合)。
active_job.set_configsconfig.active_job内の設定を用いてActive Jobをセットアップします。メソッド名をActiveJob::Baseのセッターとしてsendし、その値をActive Jobに渡します。
action_mailer.loggerActionMailer::Base.loggerにRails.loggerを設定します(未設定の場合)。
action_mailer.set_configsconfig.action_mailer内の設定を用いてAction Mailerをセットアップします。メソッド名をActionMailer::Baseのセッターとしてsendし、その値をAction Mailerに渡します。
action_mailer.compile_config_methods指定された設定用メソッドを初期化し、より高速にアクセスできるようにします。
set_load_pathこのイニシャライザはbootstrap_hookの前に実行されます。config.load_pathsおよびすべての自動読み込みパスが$LOAD_PATHに追加されます。
また、config.add_autoload_paths_to_load_pathをfalseに設定「しない」場合は、config.autoload_paths、config.eager_load_paths、config.autoload_once_pathsで指定された自動読み込みパスもすべて追加されます。
set_autoload_pathsこのイニシャライザはbootstrap_hookの前に実行されます。app/以下のすべてのサブディレクトリと、config.autoload_paths、config.eager_load_paths、config.autoload_once_pathsで指定したすべてのパスがActiveSupport::Dependencies.autoload_pathsに追加されます。
add_routing_pathsデフォルトで、アプリケーションやrailtiesやエンジンにあるconfig/routes.rbファイルをすべて読み込み、アプリケーションのルーティングを設定します。
add_localesアプリケーションやrailtiesやエンジンにあるconfig/localesファイルをI18n.load_pathに追加し、そのパスで指定された場所にある訳文にアクセスできるようにします。
add_view_pathsapp/views(アプリケーションとrailties、エンジンも含む)へのパスをビューファイルへの探索パスに追加します。
add_mailer_preview_pathsアプリケーションやrailtiesやエンジンからの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エンジンの読み込みが完了する前に行いたい処理に使う初期化ポイントへのフックを提供します。このポイント以後は、railtiesやエンジンのイニシャライザはすべて実行されます。
add_generator_templatesアプリケーションやrailtiesやエンジンにあるlib/templatesディレクトリにあるジェネレータ用のテンプレートを探索してconfig.generators.templates設定に追加します。この設定によって、すべてのジェネレータでテンプレートを参照できるようになります。
ensure_autoload_once_paths_as_subsetconfig.autoload_once_pathsに、config.autoload_paths以外のパスが含まれないようにします。それ以外のパスが含まれている場合は例外が発生します。
add_to_prepare_blocksアプリケーションやrailtiesやエンジンにあるすべてのconfig.to_prepare呼び出しのブロックが、Action Dispatchのto_prepareに追加されます。Action Dispatchはdevelopmentモードではリクエストごとに実行され、productionモードでは最初のリクエストの前に実行されます。
add_builtin_routeアプリケーションがdevelopment環境で動作している場合、rails/info/propertiesへのルーティングをアプリケーションのルーティングに追加します。ブラウザでこのルーティングにアクセスすると、デフォルトのRailsアプリケーションでpublic/index.htmlに表示されるのと同様の詳細情報(RailsやRubyのバージョンなど)を表示できます。
build_middleware_stackアプリケーションのミドルウェアスタックをビルドし、callメソッドを持つオブジェクトを返します。このcallメソッドは、リクエストに対するRack環境のオブジェクトを受け取ります。
eager_load!config.eager_loadがtrueに設定されている場合、config.before_eager_loadフックを実行してからeager_load!を呼び出します。この呼び出しによって、すべてのconfig.eager_load_namespacesが呼び出されます。
finisher_hookアプリケーションの初期化プロセス完了後に実行されるフックを提供します。アプリケーションやrailtiesやエンジンのconfig.after_initializeブロックもすべて実行します。
set_routes_reloader_hookルーティングファイルがActiveSupport::Callbacks.to_runで再読み込みされるようAction Dispatchを構成します。
disable_dependency_loadingconfig.eager_loadがtrueの場合は自動依存関係読み込み(automatic dependency loading)を無効にします。
Active RecordのデータベースコネクションはActiveRecord::ConnectionAdapters::ConnectionPoolで管理されます。これは、コネクション数に限りのあるデータベースコネクションにアクセスするときに、スレッドアクセス数とコネクションプールが同期するようにします。デフォルトの最大接続数は5で、database.ymlでカスタマイズ可能です。
development: adapter: sqlite3 database: storage/development.sqlite3 pool: 5 timeout: 5000
コネクションプールはデフォルトでActive Recordが扱うので、ThinやPumaやUnicornなどのアプリケーションサーバーの動作は同じになるはずです。最初はデータベースのコネクションプールは空で、コネクションプールの上限に達するまで必要に応じてコネクションが追加されます。
1つのリクエストでは、データベースアクセスが最初に必要になったときにコネクションをチェックアウト(貸出)し、リクエストが終了するときにコネクションをチェックイン(返却)します。つまり、キューで待機している後続のリクエストで追加のコネクションスロットが再び利用可能になります。
利用可能な数を超えるコネクションを使おうとすると、Active Recordはコネクションをブロックし、プールのコネクションが空くのを待ちます。コネクションを取得できない場合は以下のようなタイムアウトエラーが発生します。
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
上のエラーが発生する場合は、database.ymlのpoolオプションの数値を増やしてコネクションプールのサイズを増やすとよいでしょう。
マルチスレッド環境で動作しているアプリケーションでは、多数のスレッドが多数のコネクションに同時アクセスする可能性があります。その時点のリクエストの負荷によっては、限られたコネクションを多数のスレッドが奪い合う可能性があります。
Railsの設定オブジェクトに独自のコードを設定するには、config.x名前空間またはconfigに直接コードを書きます。両者の重要な違いは、ネストした設定(config.x.nested.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 or development_merchant_id
Rails::Application.config_forは、共通の設定をグループ化するshared設定をサポートしています。この共有設定は、環境設定にマージされます。
# 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 }
場合によっては、アプリケーションの一部のページをGoogleやBingやYahooやDuck Duck Goなどの検索サイトに表示したくないことがあります。サイトのインデックスを作成するロボットは、インデックス作成を許可されているページを調べるために、最初にhttp://your-site.com/robots.txtファイルの内容を分析します。
Railsはこのファイルを/publicの下に作成します。デフォルトの設定では、アプリケーションのすべてのページで検索エンジンによるインデックス作成を許可します。アプリケーションのすべてのページでインデックス作成をブロックするには、robots.txtに以下を記述します。
User-agent: * Disallow: /
特定のページのみをブロックする場合は、もう少し複雑な構文が必要です。詳しくはrobot.txtの公式ドキュメントを参照してください。
listen gemを使うと、イベントベースのファイルシステム監視を利用してRailsのファイル変更を検出できます(ただしリロードが有効な場合)。
group :development do gem "listen", "~> 3.5" end
listen gemを使わない場合、Railsはリクエストのたびにファイルの変更の有無を検出するためにアプリケーションのツリーをすべて探索します。
LinuxやmacOSでは追加のgemは不要ですが、*BSDやWindows環境では追加のソフトウェアが必要になることがあります。
一部の設定がサポート対象外である点にご注意ください。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。