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_paths
config.eager_load_paths
config.autoload_once_paths
ちなみに、作成したRailsアプリケーションは、以下のディレクトリがデフォルトで$LOAD_PATHに設定される。
-
config.eager_load_paths
app/channels
app/controllers
app/controllers/concerns
app/helpers
app/jobs
app/mailers
app/models
app/models/concerns
-
config.paths.load_paths
lib
vendor
※: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 ガイド