LoginSignup
56
46

More than 5 years have passed since last update.

Railsのconfig/enviroments配下を読んでみる

Posted at

目的

  • 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.enabledtrue の時のヘッダを定義するだけっぽい。

config.read_encrypted_secrets

  • 説明無し。
  • これは5.1.0のEncrypt Secretsにあるsecret fileを読むか読まないかの設定だね。
56
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
46