目的
- config/enviroments/配下のパラメータよくわからないまま何となくコピペしており、ちゃんと一つ一つの設定の意味を理解してみようと思った。
- development/test/productionの差分がどんな感じなのか知りたい。
前提
- versionは5.1.0.rc1
- 読むのはrails newした初期状態です。
参考
一覧
| 設定 | development | test | production |
|---|---|---|---|
| config.action_dispatch.show_exceptions | - | false | - |
| config.action_mailer.raise_delivery_errors | false | - | - |
| config.action_mailer.perform_caching | false | false | false |
| config.action_mailer.delivery_method | - | :test | - |
| config.active_support.deprecation | :log | :stderr | :notify |
| config.active_record.migration_error | :page_load | - | - |
| config.active_record.dump_schema_after_migration | - | - | false |
| config.action_controller.perform_caching | true or false | false | true |
| config.cache_store | :memory_store or :null_store | - | - |
| config.public_file_server.headers | { 'Cache-Control' => 'public, max-age=172800' } or nil | { 'Cache-Control' => 'public, max-age=3600' } | - |
| config.action_controller.allow_forgery_protection | - | false | - |
| config.assets.js_compressor | - | - | :uglifier |
| config.assets.compile | - | - | false |
| config.assets.debug | true | - | - |
| config.assets.quiet | true | - | - |
| config.cache_classes | false | true | true |
| config.consider_all_requests_local | true | true | false |
| config.eager_load | false | false | true |
| config.file_watcher | ActiveSupport::EventedFileUpdateChecker | - | - |
| config.i18n.fallbacks | - | - | true |
| config.log_level | - | - | :debug |
| config.log_tags | - | - | [ :request_id ] |
| config.log_formatter | - | - | ::Logger::Formatter.new |
| config.logger | - | - | ActiveSupport::TaggedLogging.new(logger) |
| config.public_file_server.enabled | - | true | ENV['RAILS_SERVE_STATIC_FILES'].present? |
| config.read_encrypted_secrets | - | - | true |
config.action_dispatch.show_exceptions
アプリケーションから返されるすべての例外をrescueし、リクエストがローカルであるかconfig.consider_all_requests_localがtrueに設定されている場合に適切な例外ページを出力します。config.action_dispatch.show_exceptionsがfalseに設定されていると、常に例外が出力されます。
- testだけ
false - rescueされていない例外をあぶり出すためかな。
config.action_mailer.raise_delivery_errors
メールの配信が完了しなかった場合にエラーを発生させるかどうかを指定します。デフォルトはtrueです。
- developmentだけ
false - メール配信のテストとかはdevelopment以外でやれってことかな
config.action_mailer.perform_caching
Action Mailerのビューでキャッシュをサポートするかどうかを指定できます。
- 全環境
false - メールテンプレートのキャッシュをするかしないか。
- まあ負荷とか懸念があったらやれってことかね。
config.action_mailer.delivery_method
配信方法を指定します。デフォルトは:smtpです
- testだけ
:test - テスト時はテスト配信ね。
config.active_support.deprecation
active_support.deprecation_behavior: 環境に対する非推奨レポート出力を設定します。development環境ではデフォルトで:log、production環境ではデフォルトで:notify、test環境ではデフォルトで:stderrが指定されます。config.active_support.deprecationに値が設定されていない場合、このイニシャライザは、現在の環境に対応するconfig/environmentsファイルに値を設定するよう促すメッセージを出力します。値の配列を設定することもできます。
- これはそのまま非推奨レポートをどこに出すかだな。
config.active_record.migration_error
- RailsGuideにないな・・・
- ググったら、未適応のmigrationがあるときにエラーを投げるかどうか
- developmentだけ
:page_load - 説明がソースのコメントしか無い
This class is used to verify that all migrations have been run before
loading a web page if <tt>config.active_record.migration_error</tt> is set to :page_load
-
:page_loadを設定しておくと、ウェブページを読み込む前に未適応のmigrationをチェックするってことか。
config.active_record.dump_schema_after_migration
マイグレーション実行時にスキーマダンプ(db/schema.rbまたはdb/structure.sql)を行なうかどうかを指定します。このオプションは、Railsが生成するconfig/environments/production.rbではfalseに設定されます。このオプションが無指定の場合は、デフォルトのtrueが指定されます。
- これもそのままだね。
config.action_controller.perform_caching|
アプリケーションでキャッシュを行なうかどうかを指定します。developmentモードではfalse、productionモードではtrueに設定します。
- developmentは
Rails.root.join('tmp/caching-dev.txt').exist?の判定有り。 -
tmp/caching-dev.txtをおいたらキャッシュ有効だね。
config.cache_store
Railsでのキャッシュ処理に使用されるキャッシュストアを設定します。指定できるオプションは次のシンボル:memory_store、:file_store、:mem_cache_store、:null_storeのいずれか、またはキャッシュAPIを実装するオブジェクトです。tmp/cacheディレクトリが存在する場合のデフォルトは:file_storeに設定され、それ以外の場合のデフォルトは:memory_storeに設定されます。
- developmentは
Rails.root.join('tmp/caching-dev.txt').exist?の判定有り。 -
tmp/caching-dev.txtをおいたらmemory_storeなかったらnull_store - productionは
memory_store -
memory_storeはメモリにキャッシュする。 -
null_storeはキャッシュを全く保存しない。(参考)
config.action_controller.allow_forgery_protection
CSRF保護をオンにするかどうかを指定します。testモードではデフォルトでfalseに設定され、それ以外ではtrueに設定されます。
- これもそのまま。
- テストのときはCSRF保護してたらアクセスできなかったりするから?
config.assets.js_compressor
JavaScriptの圧縮に使用するプログラムを定義します。指定できる値は:closure、:uglifier、:yuiです。それぞれclosure-compiler、uglifier、yui-compressor gemに対応します。
- productionだけ
:uglifier(入れないかもしれん。入れないと・・・) - assets配下のjavascriptに対する設定かな。
config.assets.compile
production環境での動的なSprocketsコンパイルをオンにするかどうかをtrue/falseで指定します。
- productionだけ
false - 使いたいときはtrueにしろってことで、あえてproductionにだけfalseで書いてあるのかな。
config.assets.debug
デバッグ用にアセットの連結と圧縮をやめるかどうかを指定します。development.rbではデフォルトでtrueに設定されます。
- developmentだけ
true - debug用だからね。
config.assets.quiet
- 説明無し。
- developmentだけ
true - ググったら
assets関連のログを出さないようにするっぽい。 - 開発ではassetsへのアクセスログで埋め尽くされて見えなくの嫌なので。
config.cache_classes
アプリケーションのクラスやモジュールをリクエストごとに再読み込みするか(=キャッシュしないかどうか)どうかを指定します。config.cache_classesのデフォルト値は、developmentモードではfalseなのでコードの更新がすぐ反映され、testモードとproductionモードではtrueなので動作が高速になります。同時にthreadsafe!をオンにすることもできます。
- なるほどそのままでよくわかる。
config.consider_all_requests_local
このフラグがtrueの場合、どのような種類のエラーが発生した場合にも詳細なデバッグ情報がHTTPレスポンスに出力され、アプリケーションの実行時コンテキストがRails::Infoコントローラによって/rails/info/propertiesに出力されます。このフラグはdevelopmentモードとtestモードではtrue、productionモードではfalseに設定されます。もっと細かく制御したい場合は、このフラグをfalseに設定してから、コントローラでlocal_request?メソッドを実装し、エラー時にどのデバッグ情報を出力するかをそこで指定してください。
- これもそのままでよくわかる。
config.eager_load
config.eager_loadをtrueにすると、config.eager_load_namespacesに登録された事前一括読み込み(eager loading)用の名前空間をすべて読み込みます。ここにはアプリケーション、エンジン、Railsフレームワークを含むあらゆる登録済み名前空間が含まれます。
- productionだけ
true - 名前空間を事前に読み込んでおくための設定か。
config.file_watcher
config.reload_classes_only_on_changeがtrueの場合にファイルシステム上のファイル更新検出に使用されるクラスを指定します。ActiveSupport::FileUpdateChecker APIに従う必要があります。
- developmentだけ
ActiveSupport::EventedFileUpdateChecker - でも
config.reload_classes_only_on_changeは未定義。
(ついでに)config.reload_classes_only_on_change
監視しているファイルが変更された場合にのみクラスを再読み込みするかどうかを指定します。デフォルトでは、autoload_pathで指定されたすべてのファイルが監視対象となり、デフォルトでtrueが設定されます。config.cache_classesがオンの場合はこのオプションは無視されます。
- つまりファイルをキャッシュしておくかどうかってことかな
config.i18n.fallbacks
- 説明無し。
- productionのみ
true - ググったら以下でてきた
データベースのすべてのレコードを2言語に翻訳するのは手間のかかる作業です。前に見たように、現在の言語に翻訳されていない属性にはnilの値が返されますが、フォールバック言語を設定することで、現在の言語で翻訳が存在しない場合にそれを表示させることが可能です。これをおこなうにはアプリケーションの設定ファイルを修正して、i18n.fallbacksオプションを追加します。
これによって、現在の言語で設定されていない翻訳はデフォルトのロケール(今回の場合は英語)にフォールバックします。この変更を反映するためにアプリケーションを再起動するしてページをリロードすると、Wookieespeakに翻訳テキストがない部分は代わりに英語で表示されます。
- フォールバック言語を指定できるってことか。
- これは使えるかも・・・
config.log_level
Railsのログ出力をどのぐらい詳細にするかを指定します。デフォルトでは:debugが指定されます。productionモードのみデフォルトで:infoが指定されます。
- え?productionは
:debugなんだが・・・ - 4.2.7も
:debugてなってるぞ・・・ - Railsドキュメントには
:infoって書いてある。 - どうなってんだ・・・とりあえず
:infoにしておいたほうがよさそうだな - 指定なしの時で、productionモードなら
:infoになる、ってことか?!
config.log_tags
requestオブジェクトが応答するメソッドのリストを引数に取ります。これは、ログの行にデバッグ情報をタグ付けする場合に便利です。たとえばサブドメインやリクエストidを指定することができ、これらはマルチユーザーのproductionモードアプリケーションをデバッグするのに便利です。
- productionのみ
[ :request_id ] - ログの前にリクエストのIDを出してくれるってことかね。
config.log_formatter
Railsロガーのフォーマットを定義します。このオプションは、デフォルトではActiveSupport::Logger::SimpleFormatterのインスタンスを使用します。ただしproductionモードの場合のみLogger::Formatterがデフォルトになります。
- ログのフォーマット定義ね。
config.logger
ロガーを指定します。指定されるロガーは、Log4rまたはRubyのデフォルトのLoggerクラスのインターフェイスに従います。デフォルトではActiveSupport::Loggerのログが指定されます。これはproductionモードでは自動的にログを出力します。
- こっちはロガーの定義か。
config.public_file_server.enabled
- 説明無し。
- nginxとかのWebサーバーを使わずにassetsを配信するらしい
- testは
true - productionは
ENV['RAILS_SERVE_STATIC_FILES'].present? - スタティックファイルがあるときは環境変数に入れておけば良いのか。
config.public_file_server.headers
- 説明無し。
- 上記
config.public_file_server.enabledがtrueの時のヘッダを定義するだけっぽい。
config.read_encrypted_secrets
- 説明無し。
- これは5.1.0のEncrypt Secretsにあるsecret fileを読むか読まないかの設定だね。