Railsのproduction.rbはどういう事が設定できるの？全ての設定を調べてみた！

## なぜ記事を書こうと思ったか
  Railsのproduction.rbでどのような設定をしているか及びどのような設定ができるかを確認する為に調べたので、備忘録として残します。

## production.rbのコマンド説明
- config.cache_classes = true
ソースコードをリロードしない。キャッシュが適用される。

- config.eager_load
Railsのapp以下にあるクラス(ModelやController)を起動時に全て読み込むかどうか設定

- config.consider_all_requests_local
すべてのエラーをブラウザに表示をするかの設定
例：Routing Errorなど詳細なエラー情報が表示される。

- config.action_controller.perform_caching
アプリケーションのキャッシュの有無

- config.require_master_key = true
ENV["RAILS_MASTER_KEY"]環境変数またはconfig/master.keyファイルでマスターキーを取得できない場合はアプリを起動しないようにする。

- config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
public/ディレクトリ内の静的アセットを配信するかどうかを指定するかの設定。
production環境ではアプリケーションを実行するNginxやApacheなどのサーバーが静的アセットを扱う必要があるので、falseに設定されます。

- config.asset_host
アセットを置くホストを設定
アセットとは、Webアプリケーションの直接のレスポンス以外の構成要素のことを指します。Javascript、CSS、画像などがこれにあたります。

- config.action_dispatch.x_sendfile_header = 'X-Sendfile'
バックエンドで認証やログ記録などを処理し、Apacheにリダイレクトされた場所からエンドユーザーへのコンテンツの提供を処理させることができるため、バックエンドを解放して他のリクエストを処理できる。

- config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
バックエンドで認証やログ記録などを処理し、NGINXにリダイレクトされた場所からエンドユーザーへのコンテンツの提供を処理させることができるため、バックエンドを解放して他のリクエストを処理できる。

- config.active_storage.service = :local
config/storage.ymlで名前を宣言し、このオプションでファイルを保存する場所を指定

- config.action_cable.mount_path = nil
Action Cableをメインサーバープロセスの一部としてマウントする場所を文字列で指定します。デフォルト値は/cableです。nilを設定すると、Action Cableは通常のRailsサーバーの一部としてマウントされなくなります。
ActionCableとは、Railsのアプリケーションと同様の記述で、WebSocket通信という双方向の通信によるリアルタイム更新機能を実装できるフレームワークで、Rails5から実装されました。利用することで、たとえばリアルタイムで更新されるチャット機能を実装することができます。

- config.action_cable.url = 'wss://example.com/cable'
Cableサーバを決めたら、ServerのURLをclientサイドに提供する必要がある。Action CableサーバーがホストされているURLを文字列で指定します。Action Cableサーバーがメインのアプリケーションと別になっている場合に使う可能性があります。View側に action_cable_meta_tag を書く。

- config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
指定されていない送信元からのリクエストを受け付けません。送信元リストは、配列の形でサーバー設定に渡します。送信元リストには文字列のインスタンスや正規表現を利用でき、これに対して一致するかどうかがチェックされます。

- config.force_ssl = true
すべてのリクエストをHTTPSプロトコル下で実行するよう強制し、URL生成でも"https://"をデフォルトのプロトコルに設定します。

- config.log_level = :info
Railsのログ出力をどのぐらい詳細にするかを指定します。
ログレベル(順に必要度が低くなる)：①unknown ⇨ ②fetal → ③error → ④warn → ⑤info → ⑥debug)
④を指定した場合、④⑤⑥のログが出力される。

- config.log_tags = [ :request_id ]
ログにタグ付けをする。
今回の場合、ログの前に一意の値が出力される。

- config.cache_store = :mem_cache_store
Railsでのキャッシュ処理に使われるキャッシュストアを設定します。
キャッシュの種類
①:memory_store → プロセス内のメモリ
②:file_store → ファイルシステム
③:mem_cache_store → Dangaのmemcachedサーバーに一元化
④:null_store → キャッシュをしない

- config.active_job.queue_adapter     = :resque
キューのバックエンドに用いるアダプタを設定
Resqueは、バックグラウンドジョブを作成し、それらのジョブを複数のキューに配置し、後で処理するためのRedisがサポートするライブラリ

- config.active_job.queue_name_prefix = "app_production"
キューの前にプレフィックスを付ける。
プレフィックスとは、単語の先頭に付加して特定の意味を付け加える要素（接辞）のこと。

- config.action_mailer.perform_caching = false
メイラーのテンプレートでフラグメントキャッシュを有効にするかどうかを指定します。指定のない場合のデフォルト値はtrueです。
フラグメントキャッシュとは、ページの一部分をキャッシュする機能。キャッシュされたデータはキャッシュストアに保存され、２回目以降はキャッシュストアからデータを取り出される。

- config.action_mailer.raise_delivery_errors = true
メール配信が完了しなかった場合にエラーを発生させるかどうかを指定

- config.action_mailer.default_url_options
Action MailerのビューでURLを生成する

- ActionMailer::Base.smtp_settings
ActionMailer経由の全てのメールがこのSMTP設定を用いて配信される

- ActionMailer::Base.delivery_method
配信方法の設定

- config.i18n.fallbacks = true
訳文がない場合のフォールバック動作を設定
フォールバック動作とは、システムに障害が発生したときに性能を落としたり機能を制限したりして限定的ながら稼動を続行すること。あるいは、利用したい機能が条件が悪く使えない場合に、代替となる機能に切り替えること。また、そのような機能や構成。

- config.active_support.deprecation = :notify
非推奨警告メッセージの振る舞いを設定。どこにメッセージを出力するかを指定。

- config.active_support.disallowed_deprecation = :log
利用が許されない非推奨警告メッセージの振る舞いを設定します。すべてのログ行の前に次のタグを付けます。

- config.active_support.disallowed_deprecation_warnings = []
どの非推奨メッセージを禁止するかをアクティブサポートに伝えます。

- config.log_formatter = ::Logger::Formatter.new
Railsロガーのフォーマットを定義

- config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
Rails.loggerで使われるロガーやRails関連のあらゆるロガー（ActiveRecord::Base.loggerなど）を指定します。デフォルトでは、ActiveSupport::LoggerのインスタンスをラップするActiveSupport::TaggedLoggingのインスタンスが指定されます。

- ActiveSupport::Logger.new(STDOUT)
標準出力用の Logger オブジェクトを作成する。

- config.active_record.dump_schema_after_migration = false
マイグレーション実行時にスキーマダンプ（db/schema.rbまたはdb/structure.sql）を行なうかどうかを指定
スキーマダンプとは、スキーマを抽出する。db/schema.rb の作成

## 最後に
　RailsガイドやRailsドキュメント、多くの方の記事によって設定できる内容は大方理解できたと思います。
　間違っている箇所やわからない箇所があれば、ぜひコメントしていただけると嬉しいです。
　読んで頂きありがとうございました。

## 参考資料
- [Rails 5でconfig.cache_classes = falseにしているとメモリリークする](https://qiita.com/aosho235/items/0f77e6ddbc6677734d71)
- [Railsの config.eager_load はModelやControllerを読み込むタイミングを制御できる](https://qiita.com/shakemurasan/items/305bd3d78d67b646bc06)
- [エラー情報をブラウザに表示をするかの設定](https://railsdoc.com/page/config_consider_all_requests_local)
- [コントローラのキャッシュ設定するかの設定](https://railsdoc.com/page/config_action_controller_perform_caching)
- [Railsガイド：Rails アプリケーションを設定する](https://railsguides.jp/configuring.html)
- [Rails Assetの管理についてまとめる](https://qiita.com/shizuma/items/1980bf885906c73238b6#:~:text=Asset%E3%81%A8%E3%81%AF%E3%80%81Web%E3[…]B%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)
- [X-Accel](https://www-nginx-com.translate.goog/resources/wiki/start/topics/examples/x-accel/?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc)
- [Active Storage の概要](https://railsguides.jp/active_storage_overview.html)
- [Action Cableでできることと実装方法](https://qiita.com/yamaday0u/items/8f39fb1ea85f36841c9d)
- [Action Cable の概要](https://railsguides.jp/action_cable_overview.html)
- [Railsのログを理解する-ログの基礎知識-](https://qiita.com/sobameshi0901/items/b963e7046e2ae8b8e813)
- [調査しやすくするためログにリクエストIDを入れましょう](https://tech.unifa-e.com/entry/2017/01/31/192820)
- [Rails のキャッシュ機構](https://railsguides.jp/caching_with_rails.html)
- [resque/resque](https://github.com/resque/resque)
- [プレフィックス 【prefix】 プリフィックス / 接頭辞](https://e-words.jp/w/%E3%83%97%E3%83%AC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9.html#:~:text=IT%E3%81%AE%E5%88%8[…]C%E5%A4%9A%E3%81%84%E3%80%82)
- [Railsのキャッシュ(cache)について](https://qiita.com/tomokichi_ruby/items/2e8ffeca359f7577b316)
- [Action Mailer の基礎](https://railsguides.jp/action_mailer_basics.html)
- [ActionMailerのSMTP設定を動的に変更する](https://qiita.com/tk_hamaguchi/items/6eb75c88ea9b0ea4025e)
- [HEADS UP! i18n 1.1 changed fallbacks to exclude default locale. But that may break your application.](https://qiita.com/homhom_star/items/ac0fd3769f1d7f974fa4)
- [module ActiveSupport::Deprecation::Behavior](https://runebook.dev/ja/docs/rails/activesupport/deprecation/behavior)
- [Logger のログファイルへの出力を標準出力にも出力したい](https://qiita.com/QUANON/items/8b212c04f2f3457eec87)
- [pg_dump](https://www.postgresql.jp/document/8.3/html/app-pgdump.html)