Railsのconfigurationを調べてみた(1)
なに?
Railsのconfigurationはどんなものがあって、どういう挙動なのかを調べてみた。
調べたものはRailitiesに含まれるconfigだけで、ActionViewなどは別で調べる。
各項目の細かい挙動まで十分に調べきれてはいないが、よく設定する項目などは別途調べたい。
ばーじょん
- Ruby ruby 2.7.2p137
- Rails 6.1.2
いちらん
add_autoload_paths_to_load_path(boolean)
以下のautoload_pathを、$LOAD_PATHに含めるかをbooleanで指定する。
デフォルトは true
config.autoload_pathsconfig.eager_load_pathsconfig.autoload_once_paths
ちなみに、作成したRailsアプリケーションは、以下のディレクトリがデフォルトで$LOAD_PATHに設定される。
-
config.eager_load_pathsapp/channelsapp/controllersapp/controllers/concernsapp/helpersapp/jobsapp/mailersapp/modelsapp/models/concerns
-
config.paths.load_pathslibvendor
※:zeitwerkモードでは、config/application.rbでfalseにすべきとRails Guideに明記されている。
allow_concurrency(boolean/symbol)
-
nil(デフォルト)-
InterlockHookミドルウェアを設定され、自動読み込みや再読み込みのみLockをかける
-
-
false-
MutexHookとRack::Lockミドルウェアを設定され、1つのスレッドでしか処理できなくなります
-
-
:unsafe- 何もしない
-
Do nothing, even if we know this is dangerous. This is the historical behavior for true.というコメントから分かるとおり、利用には十分な注意が必要
詳しくは、Rails Guideを参照。
asset_host(string)
assetsを配信するhostを設定する。
デフォルトは 未設定 で、相対パスとなる。
CDNなど別のhostから配信する場合は、'cdn.provider.com'のように設定する。
autoflush_log(boolean)
logを自動で書き込むかをbooleanで指定する。
※デフォルトは true
自動で書き込まない場合は、loggerのバッファに格納され続けて、flushを呼び出したときに出力される。
Rails.logger.info('hoge') # ここでは書き込まれない
Rails.logger.info('fuga') # ここでは書き込まれない
Rails.logger.flush # ここで、hogeとfugaが書き込まれる
beginning_of_week(symbol)
週のはじめの曜日を指定する。
※デフォルトは :monday
ActiveSupport::TimeWithZone#next_weekなどで利用される。
time = Time.current # => Thu, 11 Feb 2021 23:42:48.806187116 UTC +00:00
time.next_week # => Mon, 15 Feb 2021 00:00:00.000000000 UTC +00:00
cache_classes(boolean)
Railsアプリケーションのクラスをキャッシュするかどうかをbooleanで指定する。
通常は、productionではtrue、それ以外ではfalseにする。
cache_store(symbol)
キャッシュストアの方法を指定する。
デフォルトは:file_storeで、#{Rails.root}/tmp/cache/に保存される。
Rails標準のStoreは、Rails Guideにも記載されている。
consider_all_requests_local(boolean)
例外発生時に、例外の詳細を表示するかをbooleanで指定する。
通常は、productionではfalse、それ以外ではtrueにする。
なお、trueのとき、よくある↓の画面が表示される。
console(class)
rails consoleを実行したときのクラスを指定する。
デフォルトではIRBが指定されている。
Pryなどが有名。
content_security_policy_nonce_generator(Proc)
Content Security Policy用のnonceを生成するための設定する。
デフォルトはnil。
テンプレートではconfig.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }と出力される。
content_security_policy_nonce_directives(array<string>)
Content Security Policy用のnonceを付与するディレクティブを指定する。
デフォルトはnil。
テンプレートではconfig.content_security_policy_nonce_directives = %w(script-src)と出力される。
content_security_policy_report_only(boolean)
Content Security Policyに違反していたとき、リクエストをブロックするのではなく、レポートだけに留めるかどうかをbooleanで指定する。
デフォルトはfalse。
credentials(class)
credentialsの設定を格納するクラスを指定する。
デフォルトはActiveSupport::OrderedOptions.new。
このクラスのcontent_pathにcredentials.yml.encが, key_pathにmaster.keyが設定されることになる。
詳しくは、Rails Guideを参照。
disable_sandbox(boolean)
sandboxでの起動を制限するかをbooleanで指定する。
デフォルトはfalse。
rails c --sandboxのように、sandboxモードで起動できるのだが、本プロパティをfalseにしていると、起動できないようになる。
eager_load
config.cache_classesとほぼ同じ役割。
デフォルトはnilで、nilの場合はconfig.cache_classesの値がセットされる。
enable_dependency_loading(boolean)
config.cache_classes == trueの場合でも、オートロードさせたいかどうかをbooleanで指定する。
デフォルトはfalse
exceptions_app(class)
config.consider_all_requests_local == trueのときに、エラーを表示するためのクラスを指定する。
デフォルトはnilで、ActionDispatch::PublicExceptionsが設定される。
file_watcher(class)
config.reload_classes_only_on_change == trueの場合に、ファイル更新検知をするクラスを指定する。
デフォルトはActiveSupport::FileUpdateChecker。
filter_parameters(array<string>)
ログに出力したくないパラメータのkeyを指定する。
デフォルトは[]。
テンプレートで、以下のようなファイルがgenerateされる。
# config/initializers/filter_parameter_logging.rb
# Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file.
Rails.application.config.filter_parameters += [
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
filter_redirect(array)
ログに出力したくないリダイレクト先を指定する。
デフォルトは[]。
文字列だけでなく、正規表現も指定が可能。
force_ssl(boolean)
httpでの接続を禁止するかどうかをbooleanで指定する。
httpでアクセスしようとすると、以下のようになる。
helpers_paths(array<string>)
helpersを配置しているディレクトリのパスを指定する。
デフォルトは[]で、app/helpersが設定される。
hosts(array<string>)
アプリケーションを実行するサーバのhostを指定する。
デフォルトは[]だが、developmentでは".localhost", IPAddr.new("0.0.0.0/0"), IPAddr.new("::/0")が設定される。
[]の場合はActionDispatch::HostAuthorizationのチェックがスキップされるが、設定がずれていると、以下のようなエラーが発生する。
host_authorization(Hash)
ActionDispatch::HostAuthorizationのオプションを指定する。
デフォルトは{}。
指定できるのは以下の2つ。
-
exclude- ヘルスチェックのパスは除外したい場合などに利用する。
- デフォルトは
nil - example:
{ exclude: ->(request) { request.path =~ /healthcheck/ } }
- デフォルトは
- ヘルスチェックのパスは除外したい場合などに利用する。
-
response_app- 対象外のhostだった場合に呼び出すクラスを指定する。
logger(object)
Rails.loggerで利用するロガーを指定する。
デフォルトはActiveSupport::LoggerをベースにActiveSupport::TaggedLoggingが設定される。
※ActiveSupport::TaggedLoggingは、logger.formatterを拡張するだけのwrapper class
ログファイルではなく、標準出力に出力する場合は、以下のように設定する。
logger = ActiveSupport::Logger.new(STDOUT)
log_formatter(object)
ロガーのフォーマッターを指定する。
デフォルトはActiveSupport::Logger::SimpleFormatter.new
log_level(symbol)
ログファイルに出力するレベルを指定する。
デフォルトは:debugで、デバッグレベル以上のログが出力される。
ログのレベルは以下の通り
- debug(0)
- info(1)
- warn(2)
- error(3)
- fatal(4)
- unknown(5)
log_tags(array<Proc, symbol, object>)
タグ付けに対応したロガーの場合に、デフォルトで付けるタグを指定する。
デフォルトは[]。
production用のテンプレートでは、以下のように設定される。
config.log_tags = [ :request_id ]
example
config.log_tags = [ :request_id, 'HOGE' ]
# [88e2dd56-08ce-4e38-a4ab-6bc571a765dc] [HOGE] Started GET "/" for 127.0.0.1 at 2021-02-13 09:16:49 +0900
public_file_server
public_file_serverの設定を格納するクラスを指定する。
デフォルトはActiveSupport::OrderedOptions.new。
public配下のファイルをRailsアプリケーションでの配信に関する設定で、NGINXなどで配信する場合はconfig.public_file_server.enabled = falseにする。
Railsアプリケーションで配信する場合はconfig.public_file_server.headersでCache-Controlなどのヘッダーの設定を行うことができる。
railties_order(array<symbol, class>)
Railtiesの読み込み順序を指定する。
デフォルトは[:all]。
rake_eager_load(boolean)
Rake実行時にRailsアプリケーションをeager loadするかをbooleanで指定する。
デフォルトはfalse。
read_encrypted_secrets(boolean)
config/secrets/*.encファイルを読み込むかをbooleanで指定する。
デフォルトはfalse。
relative_url_root(string)
Railsアプリケーションをサブディレクトリにデプロイする場合に、/からの相対パスを指定する。
デフォルトはENV["RAILS_RELATIVE_URL_ROOT"]
詳しくは、Rails Guideを参照。
reload_classes_only_on_change(boolean)
config.cache_classes == falseの場合に、変更があったクラスのみ再読込するかをbooleanで指定する。
デフォルトはtrue。
変更があったかどうかはconfig.file_watcherを通して検知する。
require_master_key(boolean)
master_key(ENV["RAILS_MASTER_KEY"] or config/master.key)を必須とするかをbooleanで指定する。
デフォルトはfalse。
secret_key_base(string)
秘密鍵。
デフォルトはnil。
development, testモードでは、指定されていなければ、自動的に発行される。
それ以外のモードでは、設定されているかをチェックし、なければエラー終了する。
なお、秘密鍵はconfig以外にも以下の設定方法がある。
ENV["SECRET_KEY_BASE"]-
credentials.secret_key_base-
config.credentialsで読み込まれたプロパティ
-
ssl_options(Hash)
SSLオプションを指定する。
デフォルトは{}。
session_options(Hash)
セッション管理のためのオプションを指定する。
デフォルトは{}だが、config.session_storeをオプション付きで指定した場合は、オプションが本プロパティに設定される。
time_zone(string)
タイムゾーンを指定する。
デフォルトはUTC。
x
何も使われてはいなさそう。
Discussion
xは、カスタム設定項目、特にネストのあるカスタム設定項目のためのスペースになっているみたいです。Rails アプリケーションを設定する - Rails ガイド