Railsの設定

このガイドでは、Railsアプリケーションの設定と利用可能な機能の初期化について説明します。 このガイドを読むことで、次の事が学べるはずです。

  • Railsアプリケーションの動作を適合させる方法
  • アプリケーション開始時に追加コードを実行する方法

1. 初期化コードの置き場所

Railsは初期化コードの配置をするにあたり、標準で4つの場所を提供します。

  • config/application.rb
  • 環境特有の設定ファイル
  • Initializers
  • Initializers後

2. Railsの前にコードを実行する

稀なケースですが、アプリケーションがRailsが読み込まれる前に幾つかのコードの実行が必要な場合、 config/application.rb内のrequire 'rails/all'呼び出しより上に、 そのコードを配置します。

3. Railsコンポーネントの構築

通常、Railsの設定動作は、Rails自身も含めたRailsのコンポーネントを設定することを意味します。 設定ファイルであるconfig/application.rbと、 環境独自の設定ファイル(config/environments/production.rbのような)は、 開発者が全てのコンポーネントに対して適用したい様々な設定を可能にしてくれます。

例えば、デフォルトのconfig/application.rbファイルは、下記の設定を含みます。

config.filter_parameters += [:password]

これは、Rails自身のための設定です。 もし、個別にRailsのコンポーネントに設定の指定を行いたい場合は、 config/application.rb内の同じconfigオブジェクトを通して、それを行うことが可能です。

config.active_record.schema_format = :ruby

Active Recordは、この特定の設定を使用するようになります。

3.1 Railsの一般的な設定

これらの設定メソッドは、Rails::EngineまたはRails::Applicationのサブクラスなどの、 Rails::Railtieオブジェクト上で呼び出されます。

  • config.after_initializeはブロックを受け取り、 Railsがアプリケーションの初期化を終えた後にそれが実行されます。 これには、フレームワーク自身、エンジン、config/initializers内の全てのアプリケーションの初期化処理が含まれます。 このブロックは、rakeタスクのために(?)実行される事に注意してください。(翻訳に自信なし) 他の初期化によって設定された値を使用する際に便利です。

    config.after_initialize do
      ActionView::Base.sanitized_allowed_tags.delete 'div'
    end
    
  • config.asset_hostは、assetsのためのホストを設定します。 CDNがassetsのホスティングとして使用される際に、 または異なるドメインエイリアスを使用したブラウザの同一ドメイン制約を避けたい際に便利です。 config.action_controller.asset_hostのショートバージョンです。
  • config.autoload_once_pathsは、 Railsが自動読み込みし、各リクエストでは参照しない定数のパスの配列を受け取ります。 関連してdevelopmentモードの場合にはデフォルトで、 config.cache_classesfalseになります。(翻訳に自信なし) そうでなければ、全ての自動読み込みは1度だけ発生します。 また、この配列の全ての要素は、自動読み込みするパス(autoload_paths)でなければいけません。 デフォルトでは、空の配列になります。
  • config.autoload_pathsは、Railsが自動読み込みする定数から、パスの配列を受け取ります。 デフォルトは、app配下の全てのディレクトリになります。
  • config.cache_classesは、アプリケーションクラスとモジュールの各リクエスト毎の再読み込みを制御します。 デフォルトでは、developmentモードはfalse、testとproductionのモードではtrueになります。 また、threadsafe!を使用する際にも、有効にすることが出来ます。
  • config.action_view.cache_template_loadingは、テンプレートの各リクエスト毎の再読み込みを制御します。 デフォルトでは、config.cache_classesのものが設定されます。
  • config.cache_storeは、Railsのキャッシュ格納について設定を行います。 オプションには、:memory_store:file_store:mem_cache_store:null_store、またはキャッシュAPIを実装したオブジェクトのシンボルのうち1つが含まれます。 デフォルトでは、tmp/cacheが存在すれば:file_storeになり、そうでなければ:memory_storeになります。
  • config.colorize_loggingは、ログ情報の出力時にANSIカラーコードを使用するか否かを指定します。 デフォルトはtrueです。
  • config.consider_all_requests_localはフラグになります。 もし、trueであればエラーが発生した際に詳細なデバッグ情報をHTTPレスポンスに出力し、 Rails::Infoコントローラーは、/rails/info/properties内にアプリケーションランタイムのコンテキストを表示します。 デフォルトでは、developmentとtestはtrueで、productionではfalseになります。 細かく制御するには、これをfalseに設定し、コントローラーにlocal_request?を実装して、 リクエストが提供すべきエラーのデバッグ情報を指定します。
  • config.consoleは、railsコンソール実行に使用するコンソールのクラス設定を可能にしてくれます。 コンソールブロックでそれを実行するのが良いでしょう。

    console do
      # このブロックはコンソール実行時にのみ呼びだされ、
      # 安全にpryを読み込むことが出来ます。
      require "pry"
      config.console = Pry
    end
    
  • config.dependency_loadingは、falseにすることで定数の自動読み込みを無効にすることが出来るフラグです。 これはconfig.cache_classesがtrueの場合にのみ作用し、デフォルトでproductionモードがtrueになっています。 このフラグは、config.threadsafe!でfalseに設定されています。
  • config.eager_loadがtrueの場合、登録された全てのconfig.eager_load_namespacesをEager loadingします。 これは、作成したアプリケーション、エンジン、Railsフレームワーク、その他の登録された名前空間が含まれます。
  • config.eager_load_namespacesconfig.eager_loadがtrueの際に、 Eager Loadする名前空間を登録します。 登録された全ての名前空間は、eager_load!メソッドに応答しなければいけません。
  • config.eager_load_pathsは、config.cache_classesが有効の場合、 Railsから起動時にEager Loadしたパスの配列を受け取ります。 デフォルトは、アプリケーションのappディレクトリ内の各フォルダになります。
  • config.encodingはアプリケーション全体のエンコーディングの設定を行います。 デフォルトはUTF-8です。
  • config.exceptions_appは、例外発生時に ShowExceptionミドルウェアによって実行される例外アプリケーションを設定します。(翻訳に自信なし) デフォルトは、ActionDispatch::PublicExceptions.new(Rails.public_path)になります。
  • config.file_watcherは、config.reload_classes_only_on_changeがtrueの際に、 ファイルシステム内のファイル更新を検知するのに使用されるクラスです。 これは、ActiveSupport::FileUpdateCheckerAPIに従わなければいけません。
  • config.filter_parametersは、パスワードやクレジットカード番号のような、 ログに表示させたくないパラメータをフィルタリングするのに使用されます。
  • config.force_sslは、ActionDispatch::SSLミドルウェアを使用することで、 全てのリクエストをHTTPSプロトコル下に強制します。
  • config.log_formatterは、Railsのログのフォーマッターを定義します。 このオプションはデフォルトでは、productionを除く全てのモードがActiveSupport::Logger::SimpleFormatterのインスタンスで、 productionはLogger::Formatterになります。(翻訳に自信なし)
  • config.log_levelは、Railsが出力するログの冗長性(ログレベル)を設定します。 デフォルトで、productionを除くモードでは:debug、productionは:infoになります。
  • config.log_tagsは、requestオブジェクトに応答するメソッドのリストを受け取ります。 これにより、サブドメインとリクエストされたIDのようなデバッグ情報をログに簡単にタグ付けできるようになるため、 複数ユーザーによるproductionアプリケーションのデバッグで非常に有用です。(翻訳に自信なし)
  • config.loggerは、Log4rのインターフェースに従うロガーまたはデフォルトのRubyのロガークラスを受け取ります。 デフォルトは、productionモードでauto flushingがオフのActiveSupport::Loggerのインスタンスになります。
  • config.middlewareは、アプリケーションのミドルウェアの設定を可能にしてくれます。 詳細は、この後のミドルウェアの設定のセクションを参照してください。
  • config.reload_classes_only_on_changeは、 追跡(tracked)ファイルが変更された際にのみ行うクラスのリロードの有効/無効を設定します。 デフォルトでは、自動読み込みするパスの全てを追跡し、trueに設定されています。 config.cache_classesがtrueの場合、このオプションは無視されます。
  • config.secret_key_baseは、セッションが改竄されるのを防ぐために、 アプリケーションの安全なキーであることを照合するのに使用されるキーの指定に使用されます。 アプリケーションはconfig/initializers/secret_token.rb内で、 ランダムなキーで初期化されたconfig.secret_key_baseを取得します。
  • config.serve_static_assetsは、Rails自身が提供する静的なアセット(assets)の設定を行います。 デフォルトはtrueですが、サーバソフトウェア(例:NginxまたはApache)が代わりに静的なアセットを提供すべきものとして、 production環境ではfalseになっています。 Rails自身がそれを実行する際(絶対にお勧めできません!)や、WEBrickを使用してproductionモードでアプリケーションをテストする際に、 デフォルトとは異なるtrueを設定します。 そうでなければ、ページのキャッシュ、そして通常publicディレクトリ下に存在し、 Railsアプリケーションとして出力されるファイルへのリクエストの処理をすることが出来なくなります。
  • config.session_storeは、通常config/initializers/session_store.rb内で設定され、 セッションの格納に何のクラスを使用するかを指定します。 指定可能な値は、デフォルトの:cookie_store:mem_cache_store:disabledです。 最後の:disabledは、Railsにセッションを扱わない事を伝えます。 また、カスタマイズしたセッション格納を指定することも可能です。

    config.session_store :my_custom_store
    

    この場合、ActionDispatch::Session::MyCustomStoreとして、定義されていなければいけません。

  • config.time_zoneは、アプリケーションのデフォルトのタイムゾーンを設定し、 Active Recordのためのタイムゾーン認識を有効にします。
  • config.beginning_of_weekは、デフォルトのアプリケーションの週始まりの日を設定します。 これは、有効な曜日のシンボル(例::monday)を受け取ります。
  • config.whiny_nilsは、一定のメソッドがnil上で実行され応答できない際の警告の有効/無効を設定します。 デフォルトでは、developmentとtestの環境でtrueです。

3.2 アセットの設定

  • config.assets.enabledは、アセットパイプライン(asset pipeline)の有効/無効を制御するフラグです。 これは、config/application.rb内で明確に初期化されます。
  • config.assets.compressは、コンパイルするアセットの圧縮の有効/無効を制御するフラグです。 config/production.rb内(productionモード)で明示的にtrueに設定されています。
  • config.assets.css_compressorは、使用するCSSコンプレッサー(圧縮器)を定義します。 デフォルトの設定は、sass-railsが定義されています。 現在の唯一の代替値は:yuiで、これはyui-compressorgemを使用します。
  • config.assets.js_compressorは、使用するJavaScriptコンプレッサー(圧縮器)を定義します。 指定可能な値は、:closure:uglifier:yuiで、 それぞれclosure-compileruglifieryui-compressorのgemの使用が必要になります。
  • config.assets.pathsは、アセットを探すのに使用されるパスが含まれます。 この設定オプションにパスを追加すると、アセットを探すのにそれらのパスが使用されるようになります。
  • config.assets.precompileは、rake assets:precompile実行時に、 プリコンパイルされる追加アセット(application.cssapplication.js以外)の指定を可能にしてくれます。
  • config.assets.prefixは、アセットが提供される場所のプレフィックスを定義します。 デフォルトは/assetsになります。
  • config.assets.digestはアセット名に使用するMD5フィンガープリントを有効にします。 production.rb内でデフォルトでtrueに設定されています。
  • config.assets.debugは、アセットの連結と圧縮を無効にします。 development.rb内でデフォルトでtrueに設定されています。
  • config.assets.cache_storeは、Sprocketsを使用するキャッシュストアを定義します。 デフォルトは、Railsファイル格納になります。
  • config.assets.versionは、MD5ハッシュ生成に使用される任意の文字列です。 これは再コンパイルすることで、全てのファイルに対して強制的に変更することが出来ます。
  • config.assets.compileは、 production環境で「ライブSprocketsコンパイル」をオンにするのに使用する真偽値です。
  • config.assets.loggerは、Log4rの実装に従うロガー、またはデフォルトのRubyロガークラスを受け取ります。 デフォルトでは、config.loggerで設定されているものと同じになります。 config.assets.loggerをfalseに設定すると、アセットのログ提供がオフになります。

3.3 ジェネレーターの設定

Railsでは、config.generatorsで使用するジェネレーターを差し替える事が出来ます。 このメソッドはブロックを受け取ります。

config.generators do |g|
  g.orm :active_record
  g.test_framework :test_unit
end

下記のメソッドを、このブロック内で使用することが可能です。

  • assetsはスキャフォールド生成時にアセットの生成を許可します。デフォルトはtrueです。
  • force_pluralは複数形のモデル名を許可します。デフォルトはfalseです。
  • integration_toolは使用する統合ツールを定義します。デフォルトはnilです。
  • javascriptsは、ジェネレーター内でJavaScriptファイルのためのフックをオンにします。 Railsスキャフォールドのジェネレーター時に使用されます。デフォルトはtrueです。
  • javascript_engineは、アセット生成時に使用されるエンジン(例:coffee)を設定します。デフォルトはnilです。
  • ormは、orm使用を定義します。デフォルトはfalseで、デフォルトのActive Recordを使用します。
  • resource_controllerは、rails generate resourceコマンドを実行する際に、 コントローラー生成に使用されるジェネレーターを定義します。 デフォルトは、:controllerです。
  • scaffold_controllerは、resource_controllerと異なり、rails generate scaffoldコマンドを実行する際に、 スキャフォールドでのコントローラー生成時に使用されるジェネレーターを定義します。 デフォルトは:scaffold_controllerです。
  • stylesheetsは、ジェネレーターでのスタイルシートのフックをオンにします。 Railsでスキャフォールドの実行時に使用されますが、このフックは他のジェネレーターでも同様に使用されます。 デフォルトはtrueです。
  • stylesheet_engineは、アセット生成時にスタイルシートのエンジン(例: sass)を設定します。 デフォルトは:cssです。
  • test_frameworkは、使用するテストフレームワークを定義します。 デフォルトはfalseで、デフォルトのTest::Unitを使用します。
  • template_engineは、ERBやHamlのような使用するテンプレートエンジンを定義します。 デフォルトは、:erbです。

3.4 ミドルウェアの設定

ミドルウェアの標準セット付きのRailsアプリケーションは、開発環境ではこの順序で使用されます。

  • ActionDispatch::SSLは各リクエストをHTTPSプロトコル配下に強制します。 config.force_sslがtrueに設定されると、利用可能になります。 config.ssl_optionsを使用して、これにオプションを渡すことで設定を行うことが可能です。
  • ActionDispatch::Staticは、静的なアセットの提供に使用されます。 無効にするには、config.serve_static_assetsをfalseにします。
  • Rack::Lockは、Mutexのアプリケーションをラップするため、 同時に1つのスレッドからのみ呼び出されるようにすることが出来ます。 config.cache_classesがfalseの場合にのみ、有効になります。
  • ActiveSupport::Cache::Strategy::LocalCacheは、基本的なメモリのバックアップキャッシュとして提供されます。 このキャッシュはスレッドセーフでは無く、シングルスレッドのための一時的なメモリキャッシュとして機能するためのものです。
  • Rack::Runtimeは、X-Runtimeヘッダーを設定し、そのリクエストの処理に掛かった時間(秒)を含めるようにします。
  • Rails::Rack::Loggerは、リクエストの開始にログに通知します。 リクエストが完了すると、全てのログをクリアします。
  • ActionDispatch::ShowExceptionsは、 リクエストがローカル、またはconfig.consider_all_requests_localがtrueに設定されていれば、 アプリケーションによる何らかの例外をrescueし、ユーザーに対して表示しても問題のない例外ページを描画します。 もし、config.action_dispatch.show_exceptionsがfalseに設定されていると、 それらとは関係無く例外が発生します。
  • ActionDispatch::RequestIdは、レスポンスで利用可能な一意のX-Request-Idヘッダーを作成し、 ActionDispatch::Request#uuidメソッドを有効にします。
  • ActionDispatch::RemoteIpは、IPスプーフィング攻撃を調べるために、 リクエストヘッダーから有効なclient_ipを取得します。 config.action_dispatch.ip_spoofing_checkconfig.action_dispatch.trusted_proxiesオプションで設定します。
  • Rack::Sendfileはファイルから提供されるbodyを奪い、 サーバに指定されたX-Sendfileヘッダーを使用してそれを置換します。 config.action_dispatch.x_sendfile_headerで設定します。
  • ActionDispatch::Callbacksは、リクエストが提供される前に準備を行うコールバックを実行します。
  • ActiveRecord::ConnectionAdapters::ConnectionManagementは、 rack.testキーがリクエストされた環境でtrueに設定されていなければ、 各リクエスト後にアクティブな接続をクリーンアップします。
  • ActiveRecord::QueryCacheは、リクエストによる全てのSELECTクエリーをキャッシュします。 もし、何らかのINSERTまたはUPDATEがそこに発生すれば、そのキャッシュをクリーンアップします。
  • ActionDispatch::Cookiesは、そのリクエストのためのCookieを設定します。
  • ActionDispatch::Session::CookieStoreは、Cookie内のセッションの格納を請け負います。 代替のミドルウェアは、config.action_controller.session_storeを代替値に変更することで、これを使用することが出来ます。 更にconfig.action_controller.session_optionsを使用して、オプションを渡すことで設定することが可能です。
  • ActionDispatch::Flashは、flashキーを設定します。 config.action_controller.session_storeに値が設定されている場合のみ、利用することが出来ます。
  • ActionDispatch::ParamsParserはリクエストに含まれるパラメータを解析し、 それをparamsに入れます。
  • Rack::MethodOverrideは、params[:_method]が設定されていた場合、 それを上書き可能にします。 これは、PATCH、PUT、DELETEのメソッドタイプをサポートするHTTPミドルウェアです。
  • ActionDispatch::Headは、HEADリクエストをGETリクエストに変換し、 GETリクエストであるとして提供します。

これらの通常のミドルウェア以外にも、config.middleware.useメソッドを使用して、 独自のものを追加することが出来ます。

config.middleware.use Magical::Unicorns

これにより、Magical::Unicornsミドルウェアがスタックの最後に配置されます。 他のミドルウェアの前に追加したければ、insert_beforeを使用します。

config.middleware.insert_before ActionDispatch::Head, Magical::Unicorns

また、他のミドルウェアの後に追加をするinsert_afterも存在します。

config.middleware.insert_after ActionDispatch::Head, Magical::Unicorns

ミドルウェアはまた、完全にスワップアウトし、他のものに置き換えることも可能です。

config.middleware.swap ActionController::Failsafe, Lifo::Failsafe

また、スタックから完全に取り除くことも可能です。

config.middleware.delete "Rack::MethodOverride"

3.5 i18nの設定

  • config.i18n.default_localeは、デフォルトでi18nのためにアプリケーションに使用されロケールを指定します。 デフォルトは、:enです。
  • config.i18n.load_pathは、Railsがロケールファイルを探すためのパスを設定します。 デフォルトは、config/locales/*.{yml,rb}です。

3.6 Active Recordの設定

config.active_recordには、様々な設定オプションが含まれています。

  • config.active_record.loggerは、何らかの新しいデータベース接続作成に渡されるLog4rのインターフェースに沿ったロガー、 またはデフォルトのRubyロガークラスを受け取ります。 開発者は、Active RecordモデルクラスまたはActive Recordインスタンスのいずれかで、このロガーを呼び出すことで取得する事が出来ます。 nilを設定すると、ログ出力は無効になります。
  • config.active_record.primary_key_prefix_typeは、主キーカラムの命名の調整を可能にしてくれます。 デフォルトでは、Railsは主キーのカラムをidと命名しようとします。 (また、このオプションへの設定が必要無ければ) 他に2つの選択肢が存在します。 :table_nameは、主キーをCustomerクラスであればcustomeridにし、 :table_name_with_underscoreは、主キーをCustomerクラスであればcustomer_idにします。
  • config.active_record.table_name_prefixは、テーブル名の前に付けられるグローバルな文字列の設定を可能にしてくれます。 もし、これにnorthwest_を設定すると、Customerクラスは自身のテーブルとしてnorthwest_customersを探します。 デフォルトは空文字列です。
  • config.active_record.table_name_suffixは、テーブル名の後ろに付けられるグローバルな文字列の設定を可能にしてくれます。 もし、これに_northwestを設定すると、Customerクラスは自身のテーブルとしてcustomers_northwestを探します。 デフォルトは空文字列です。
  • config.active_record.pluralize_table_namesは、 Railsがデータベースの単数形または複数形のテーブル名のどちらを参照するかを指定します。 true(デフォルト)が設定されていれば、Customerクラスはcustomersテーブルを使用します。 falseが設定されていれば、Customerクラスはcustomerテーブルを使用します。
  • config.active_record.default_timezoneは、データベースから日付けと時間を取得する際に、 Time.local(:localを設定)と Time.utc(:utcを設定)のどちらを使用するかを決定します。 Railsではデフォルトは:utcですが、Rails外で使用する場合、Active Recordのデフォルトは:localです。
  • config.active_record.schema_formatは、データベースのスキーマがファイルにdumpされるフォーマットを制御します。 オプションには、マイグレーションに依存したデータベースとは独立した:ruby(デフォルト)、 またはSQL文のセット(潜在的にデータベース依存)である:sqlがあります。
  • config.active_record.timestamped_migrationsはマイグレーションに、 シリアル数値またはタイムスタンプでのナンバー付けのどちらにするかを制御します。 デフォルトはtrueでタイムスタンプを使用します。 複数の開発者が同じアプリケーションを開発をする場合は、こちらの方が良いでしょう。
  • config.active_record.lock_optimisticallyは、Active Recordが楽観的ロックを使用するかを制御し、 デフォルトはtrueです。
  • config.active_record.cache_timestamp_formatは、キャッシュキー内のタイムスタンプ値のフォーマットを制御します。 デフォルトは、:numberです。

MySQLアダプタの場合、設定の追加オプションが1つあります。

  • ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleansは、 Active RecordがMySQLデータベースの全てのtinyint(1)のカラムを真偽値とみなすか否かを制御します。 デフォルトはtrueです。

スキーマのdumpは、設定オプションを1つ追加します。

  • ActiveRecord::SchemaDumper.ignore_tablesは、 スキーマファイルの生成に含めるべきではないテーブルの配列を受け取ります。 この設定は、config.active_record.schema_format == :rubyで無ければ、無視されます。

3.7 Action Controllerの設定

config.action_controllerは、幾つかの設定が含まれます。

  • config.action_controller.asset_hostはアセット用のホストを設定します。 アプリケーションサーバ自身では無くアセット用のホストとしてCDNを使用する場合に便利です。
  • config.action_controller.perform_cachingは、アプリケーションがキャッシュを行うか否かを設定します。 developmentモードではfalse、productionではtrueが設定されます。
  • config.action_controller.default_static_extensionは、キャッシュページで使用される拡張子を設定します。 デフォルトは.htmlです。
  • config.action_controller.default_charsetは、全ての描画でのデフォルトの文字コード設定を指定します。 デフォルトは、"utf-8"です。
  • config.action_controller.loggerは、Log4rのインターフェースに沿ったロガー、 またはデフォルトのRubyロガークラスを受け入れ、Actionコントローラーからのログ情報に使用します。 nilを設定すると、ログ出力が無効になります。
  • config.action_controller.request_forgery_protection_tokenは、 リクエストフォージェリのためのトークンパラメータ名を設定します。 protect_from_forgeryの呼び出しは、 デフォルトで:authenticity_tokenを設定します。
  • config.action_controller.allow_forgery_protectionはCSRFに対する防御の有効・無効を設定します。 デフォルトではテストモードではfalseで、それ以外のモードではtrueです。
  • config.action_controller.relative_url_rootは、Railsにデプロイするサブディレクトリを伝えるのに使用されます。 デフォルトは、ENV['RAILS_RELATIVE_URL_ROOT']です。
  • config.action_controller.permit_all_parametersは、 全てのパラメータのmass assignmentがデフォルトのままで許可されるかを設定します。 デフォルト値はfalseです。
  • config.action_controller.action_on_unpermitted_parametersは、 もし明示的に許可されていないパラメータが見つかった場合のログ出力または例外発生を有効にします。 :logまたは:raiseを設定すると、有効になります。 development、test環境のデフォルト値は:logで、 その他の環境ではfalseです。
  • 3.8 Action Dispatchの設定

  • config.action_dispatch.session_storeは、セッションデータのストア名を設定します。 デフォルトは:cookie_storeで、その他の有効なオプションには:active_record_store:mem_cache_store、またはオリジナルのカスタムクラスの名前になります。
  • config.action_dispatch.default_headersは、 デフォルトで各レスポンスの値が設定されたHTTPヘッダーのハッシュです。 デフォルトでは下記のように定義されます。

    config.action_dispatch.default_headers = {
      'X-Frame-Options' => 'SAMEORIGIN',
      'X-XSS-Protection' => '1; mode=block',
      'X-Content-Type-Options' => 'nosniff'
    }
    
  • config.action_dispatch.tld_lengthは、アプリケーションのためのTLD(トップレベルドメイン)の長さ(数)を設定します。 デフォルトは1です。

    これは例えば、co.jpのようなドメインを使用する場合は、2と指定するようです。
    参照:Railsでsubdomainを使う際にtld_lengthを設定する | TechRacho

  • ActionDispatch::Callbacks.beforeは、リクエストの前に実行するコードのブロックを取得します。
  • ActionDispatch::Callbacks.to_prepareは、ActionDispatch::Callbacks.beforeの後、 ただしリクエストの前に実行するブロックを取得します。 development環境では各リクエストで実行されますが、 cache_classesがtrueに設定されているproduction環境などでは、1度だけです。
  • ActionDispatch::Callbacks.afterは、リクエストの後に実行するコードのブロックを取得します。

3.9 Action Viewの設定

config.action_view includes a small number of configuration settings:

  • config.action_view.field_error_procは、 Active Recordからのエラーを表示するためのHTMLジェネレーターを提供します。 デフォルトは下記の通りです。

    Proc.new do |html_tag, instance|
      %Q(<div class="field_with_errors">#{html_tag}</div>).html_safe
    end
    
  • config.action_view.default_form_builderは、デフォルトで使用するフォームのビルダーをRailsに伝えます。 デフォルトはActionView::Helpers::FormBuilderです。 もし、自分のフォームのビルダークラスを初期化(development環境では各リクエストで再読み込みされます)の後に読み込ませたい場合、 文字列(String)としてそれを渡すことが可能です。
  • config.action_view.loggerは、Action Viewからのログ情報出力に使用される、 Log4rのインターフェースに従ったロガー、またはデフォルトのRubyロガークラスを受け取ります。 nilを設定すると、ログ出力は無効になります。
  • config.action_view.erb_trim_modeは、 ERBによって使用されるトリム(trim)モードを提供します。 デフォルトは、'-'です。 詳細は、ERBドキュメントの情報を参照してください。
  • config.action_view.embed_authenticity_token_in_remote_formsは、 :remote => trueであるフォーム内のauthenticity_tokenのためのデフォルトの挙動を設定します。 デフォルトではfalseに設定されており、これはremoteフォームがauthenticity_tokenを含まない事を意味し、 フォームのfragment-caching(断片キャッシュ)をする際に便利です。 remoteフォームはメタタグから信頼(authenticity)情報を取得するため、 JavaScriptがオフのブラウザをサポートしない限り、この埋め込みは不要です。 そのようなケースでは、フォームのオプションとして:authenticity_token => trueを渡すか、 この設定をtrueにすることで対応可能です。
  • config.action_view.prefix_partial_path_with_controller_namespaceは、 名前空間名が付けられたコントローラーのpartialをの描画テンプレートを、サブディレクトリから探すか否かを決定します。 例えば、コントローラー名がAdmin::PostsControllerで、下記のテンプレートを描画することを考えてみます。

    <%= render @post %>
    

    デフォルトで設定されているtrueであれば、/admin/posts/_post.erbのpartialを使用します。 値をfalseに設定すると、PostsControllerのような名前空間が無い場合と同じように、 /posts/_post.erbを描画します。

3.10 Action Mailerの設定

config.action_mailerには、下記の設定項目が利用可能です。

config.action_mailer.logger
Action Mailerからログ情報を出力する際に使用する、Log4rのインターフェースに従ったロガー、またはデフォルトのRubyのロガークラスを受け取ります。 nilを設定すると、ログ出力は無効になります。
config.action_mailer.smtp_settings

:smtpのdeliveryメソッドのための詳細な設定を行います。 これは下記のオプションを含むハッシュを受け取ります。

  • :address - リモートのメールサーバの使用を可能にしてくれます。 デフォルトで設定されている"localhost"の設定を変更します。
  • :port - 万が一、メールサーバがポート番号25で動いていない場合、これを変更することが出来ます。
  • :domain - もしHELOドメインを指定する必要がある場合、ここでそれを行います。
  • :user_name - もし、メールサーバが認証を必要とする場合、ユーザ名をここに設定します。
  • :password - もし、メールサーバが認証を必要とする場合、パスワードをここに設定します。
  • :authentication - もし、メールサーバが認証を必要とする場合、ここに認証タイプを指定する必要があります。 :plain:login:cram_md5のいずれかのシンボルを指定します。
config.action_mailer.sendmail_settings

sendmailのdeliveryメソッドのための詳細な設定を行います。 これは下記のオプションを含むハッシュを受け取ります。

  • :location - sedmail実行する場所を指定します。 デフォルトは/usr/sbin/sendmailです。
  • :arguments - コマンドライン引数を指定します。 デフォルトは、-i -tです。
config.action_mailer.raise_delivery_errors
メール送信が完了しなかった場合、エラーを発生させるか否かを指定します。 デフォルトはtrueです。
config.action_mailer.delivery_method
deliveryメソッドを定義します。 :smtp(デフォルト)、:sendmail:testのいずれかが指定可能です。
config.action_mailer.perform_deliveries
メールが実際に送信するか否かを指定し、デフォルトはtrueです。 これは、テストの際にfalseに設定すると便利です。
config.action_mailer.default_options

Action Mailerのデフォルトの設定を行います。 各メーラーのためのfromまたはreply_toのようなオプションの設定に使用します。 デフォルトは下記の通りです。

:mime_version => "1.0",
:charset      => "UTF-8",
:content_type => "text/plain",
:parts_order  => [ "text/plain", "text/enriched", "text/html" ]
config.action_mailer.observers

メールが送信された際にそれを報告するオブサーバー(observer)を登録します。

config.action_mailer.observers = ["MailObserver"]
config.action_mailer.interceptors

メールが送信される前に呼び出されるインターセプター(interceptor)を登録します。

config.action_mailer.interceptors = ["MailInterceptor"]

3.11 Active Supportの設定

config.active_support.bare
Rails起動時にactive_support/allの読み込みの有効・無効を設定します。 デフォルトはnilで、これはactive_support/allの読み込みを意味します。
config.active_support.escape_html_entities_in_json
JSONシリアライズ内のHTMLエンティティのエスケープの有効・無効を設定します。 デフォルトはfalseです。
config.active_support.use_standard_json_time_format
日付けのISO 8601フォーマットの有効・無効を設定します。 デフォルトはtrueです。
ActiveSupport::Logger.silencer
falseに設定すると、ブロック内でログ出力を沈黙させる処理を無効にします。 デフォルトはtrueです。
ActiveSupport::Cache::Store.logger
キャッシュストア操作でのログ出力に使用するロガーを指定します。
ActiveSupport::Deprecation.behavior
Railsで非推奨の警告をする際の振る舞いを設定するconfig.active_support.deprecationのセッターの代わりとして使用します。
ActiveSupport::Deprecation.silence
全ての非推奨の警告を沈黙させるか否かを設定します。
ActiveSupport::Deprecation.silenced
非推奨警告を表示させるか否かを設定します。
ActiveSupport::Logger.silencer
falseに設定するとブロック内でログを沈黙させる機能を無効にします。 デフォルトはtrueです。

3.12 データベースの設定

ほぼ全てのRailsアプリケーションは、データベースと連携します。 データベースを使用するには、config/database.ymlと呼ばれる設定ファイルを指定します。 新しいRailsアプリケーション上でこのファイルをが開くと、デフォルトでSQLite3を使用する設定がされている事が分かります。 このファイルは、Railsがデフォルトで実行できる3つの異なる環境のためのセクションを含みます。

  • development環境は、開発者がアプリケーションを直接手を加える開発/ローカル環境のコンピュータで使用されます。
  • test環境は、自動テストを実行する際に使用されます。
  • production環境は、あなたのアプリケーションを世界に向けて公開するために、デプロイする際に使用されます。

あなたは手動でデータベースの設定を更新する必要はありません。 もし、アプリケーションジェネレーターのオプションを見れば、 オプションの1つに--databaseという名前のものがある事に気づくでしょう。 このオプションで、最も使用されるデータベースのリストから、アダプターを選択することが可能です。 ジェネレータを繰り返し実行することが出来ます。(cd .. && rails new blog --database=mysql) config/database.ymlの上書きを確認すると、 アプリケーションはSQliteの代わりに、MySQLを設定します。 一般的なデータベースの接続例を、この後詳しく紹介していきます。

3.12.1 SQLite3の設定

Railsは軽量なサーバ不要のデータベースアプリケーションであるSQLite3を組み込みでサポートしています。 SQLiteは負荷の多いproduction環境では荷が重く適さないため、 developmentとtest環境で使用するのが良いでしょう。 新しいプロジェクトを作成すると、RailsはデフォルトでSQliteデータベースを使用しますが、 これはその後いつでも変更することが可能です。

下記は、デフォルトの設定ファイル(config/database.yml)のdevelopment環境の接続情報のセクションです。

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Railsは、データベースの設定を何も行わなくても動作する事から、 デフォルトのデータストレージにSQLite3データベースを使用します。 Railsはまた、"すぐに使える"MySQLとPostgreSQLもサポートし、多くのデータベースシステムのためのプラグインが用意されています。 もし、production環境でデータベースを使用する場合は、Railsにはそれらのアダプタが設定されるでしょう。

3.12.2 MySQLの設定

もし、デフォルトのSQLite3の代わりに、MySQLを選択する場合、 config/database.ymlを少し変更する必要があります。 下記はdevelopmentセクションの例になります。

development:
  adapter: mysql2
  encoding: utf8
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

もし、開発マシンにrootユーザーと空パスワードで、MySQLがインストールされていれば、 この設定で動作するはずです。 そうでなければ、developmentセクションのusernameとpasswordを適切なものに変更してください。

3.12.3 PostgreSQLの設定

もし、PostgreSQLを選択するのであれば、config/database.ymlをPostgreSQLを使用するように変更します。

development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5
  username: blog
  password:

PREPARE文は、このようにして無効にすることが出来ます。

production:
  adapter: postgresql
  prepared_statements: false
3.12.4 JRubyプラットフォームのためのSQLite3の設定

もし、SQLite3とJRubyを使用するのであれば、 config/database.ymlを少し変更する必要があります。 下記はdevelopmentセクションになります。

development:
  adapter: jdbcsqlite3
  database: db/development.sqlite3
3.12.5 JRubyプラットフォームでのMySQLの設定

もし、MySQLとJRubyを使用するのであれば、 config/database.ymlは少し変更する必要があります。 下記はdevelopmentセクションになります。

development:
  adapter: jdbcmysql
  database: blog_development
  username: root
  password:
3.12.6 JRubyプラットフォームでのPostgreSQLの設定

もし、PostgreSQLとJRubyを使用するのであれば、 config/database.ymlは少し変更する必要があります。 下記はdevelopmentセクションになります。

development:
  adapter: jdbcpostgresql
  encoding: unicode
  database: blog_development
  username: blog
  password:

developmentセクション内のusernameとpasswordは、適切なものに変更してください。

3.13 Rails環境の設定

デフォルトで、Railsには3つの"development"、"test"、"production"の環境が備わっています。 ほとんど場合これで十分ですが、やむを得ず環境がもっと必要になるようなケースも存在するかもしれません。

production環境をミラーリングしますが、テストでしか使用されないサーバをあなたが持っていると仮定してください。 そのようなサーバは一般的に"ステージングサーバ"と呼ばれます。 "ステージング"と呼ばれる環境をこのサーバのために定義するには、 config/environments/staging.rbと呼ばれるファイルを作成します。 config/environments内に存在するファイルを使用して、スタート時に必要な変更を指定してみてください。

作成したステージングの環境はデフォルトで用意されているものと同じく、 rails server -e stagingでサーバを起動し、 rails console staging、Rails.env.staging?などが動作します。

4. Rails環境の設定

Railsの一部は、環境値が与えられることによって設定することも可能です。 下記の環境値は、Railsの様々な部分で見分けられます。

ENV["RAILS_ENV"]
Railsの実行環境(production、development、testのような)を定義します。
ENV["RAILS_RELATIVE_URL_ROOT"]
アプリケーションをサブディレクトリにデプロイした際のURL判定のルーティング(経路)のコードで使用されます。
ENV["RAILS_CACHE_ID"]ENV["RAILS_APP_VERSION"]
Railsのキャッシュコード内の拡張キャッシュキーの生成に使用されます。 これは、同じアプリケーションで複数の個々のキャッシュを持つことを可能にしてくれます。

5. 初期化ファイルの使用

フレームワークが読み込まれ、gemがアプリケーションに取り込まれると、 次にRailsは初期化を行います。 イニシャライザー(initializer)は、アプリケーション内のconfig/initializers下に格納されたRubyファイルです。 イニシャライザーを使用して、全てのフレームワークとgemが読み込まれた後に、 オプションの設定のような、行うべき設定を保持させることが出来ます。

Railsはイニシャライザーのフォルダの階層を下って探してくれるため、 必要であれば、イニシャライザーにサブディレクトリを使用することが出来ます。

もし、イニシャライザーで依存関係の都合で読み込み順を指定する必要がある場合、 ファイルの名前付けによって読み込み順を制御することが可能です。 イニシャライザーのファイルは、それらのパスのアルファベット順で読み込まれます。 例えば、01_critical.rbは、02_normal.rbの前に読み込まれます。

6. イベントの初期化

Railsは、フックする事が出来る5つの初期化イベントを持ちます。 (リストされている順に実行されます)

before_configuration
これはRails::Applicationから、アプリケーション定数が継承されてすぐ後にに実行されます。 configの呼び出しは、これが発生する前に評価されます。
before_initialize
これはRails初期化プロセスの始めの方の:bootstrap_hookイニシャライザーでの、 アプリケーション発生の初期化プロセスの前に直接実行されます。
to_prepare
全てのRailtie(アプリケーション自身を含む)を実行する初期化処理の後に実行されますが、 Eager Loadingとミドルウェアスタック構築の前になります。 重要なことになりますが、development環境では各リクエストで実行されますが、 productiontest環境では、一度(起動中)だけであることに注意してください。
before_eager_load
Eager Loading発生前に直接実行します。 これはデフォルトでproduction環境では実行されますが、development環境では実行されません。
after_initialize
config/initializersが実行されたアプリケーションの初期化処理の後に直接実行されます。

これらのフックするイベントを定義するには、 Rails::ApplicationRails::RailtieRails::Engineサブクラスのいずれかの中で、 ブロック文法を使用します。

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # 初期化コードをここに書きます。
    end
  end
end

代わりに、Rails.applicationオブジェクト上のconfigメソッドを使用してそれを行うことも可能です。

Rails.application.config.before_initialize do
  # ここに初期化コードを書きます。
end

ルーティング(経路)を明確にするアプリケーションの一部は、 after_initializeブロックが呼ばれるこの時点ではまだ設定されません。

6.1 Rails::Railtie#initializer

Railsは開始時に実行される幾つかのイニシャライザーを持ち、 それは全てRails::Railtieinitializerを使用して定義されています。 下記は、Active Supportでのinitialize_whiny_nilsイニシャライザーの例です。

initializer "active_support.initialize_whiny_nils" do |app|
  require 'active_support/whiny_nil' if app.config.whiny_nils
end

initializerメソッドは、1つ目がイニシャライザーの名前、 2つ目がオプションのハッシュ、3つ目がブロックの3つの引数を受け取ります。 オプション内の:beforeキーは、このイニシャライザーの前に実行する必要のあるイニシャライザーを指定することができ、 :afeterはその後に実行する必要のあるイニシャライザーを指定することが可能です。

initializerメソッドを使用して定義されたイニシャライザーは、 :beforeまたは:afterを使用したものを除き、定義された順に実行されます。

ロジックに問題が無ければ、他のイニシャライザーのチェーンの前または後にイニシャライザーを配置しても構いません。 あなたが、"one"から"four"と名付けられた(その順に定義された)4つのイニシャライザーを持ち、 "four"を「"four"の前に、ただし"three"の後に」と定義したとすると、 これはロジックに問題があるため、Railsはイニシャライザーの順番を判断することが出来ません。(翻訳に自信なし)

initializerメソッドのブロック引数は、アプリケーション自身のインスタンスであり、 例のようにしてconfigメソッドを使用することによってconfigにアクセスする事が可能です。

何故なら、Rails::ApplicationRails::Railtie(間接的に)から継承されており、 config/application.rb内のメソッドをアプリケーションのイニシャライザーを定義するために使用することが出来るためです。

6.2 Initializers

下記は、Rails内の定義されている順に列挙した包括的なイニシャライザーのリストです。 (そのため、特に明記しない限り、実行されます(翻訳に自信なし))

load_environment_hook
:load_environment_configを、その前に実行させるために定義可能にするプレースホルダとして提供されます。(翻訳に自信なし)
load_active_support
active_support/dependenciesをrequireし、Active Supportのための基本的な設定を行います。 もし、config.active_support.bareがtrueで無い場合、任意でactive_support/allをrequireし、 これがデフォルトになります。
initialize_logger
アプリケーションのロガー(ActiveSupport::Loggerオブジェクト)を初期化し、 この場所の前に挿入されたイニシャライザーがRails.loggerを定義していないのであれば、Rails.loggerへのアクセスを可能にします。
initialize_cache
もし、Rails.cacheがまだ設定されていない場合、config.cache_store内の値を参照することでキャッシュを初期化し、 Rails.cacheとして結果を格納します。 もしこのオブジェクトが、ミドルウェアのメソッドに応答する場合、 そのミドルウェアは、ミドルウェアのスタック内のRack::Runtimeの前に挿入されます。
set_clear_dependencies_hook
このイニシャライザーの前に実行するactive_record.set_dispatch_hooksを使用するためのフックを提供します。 このイニシャライザー(cache_classesがfalseに設定された場合のみ実行)は、 オブジェクト空間からリクエストの間に参照される定数を削除するためにActionDispatch::Callbacks.afterを使用するため、 次のリクエスト時に再読み込みが行われます。
initialize_dependency_mechanism
もし、config.cache_classesがtrueの場合、 ActiveSupport::Dependencies.mechanismは、それらをloadするのではなく、 依存関係をrequireするように構成されます。
bootstrap_hook
設定された全てのbefore_initializeブロックを実行します。
i18n.callbacks
development環境で、 最後のリクエストから何らかのロケールが変更されていれば、 I18n.reload!を呼び出すto_prepareコールバックを設定します。 productionモードでは、このコールバックは最初のリクエストでのい実行されます。
active_support.initialize_whiny_nils

もし、config.whiny_nilsがtrueの場合、active_support/whiny_nilをrequireします。 このファイルは下記のようなエラーを出力します。

Called id for nil, which would mistakenly be 4 — if you really wanted the id of nil, use object_id
(nil上でidが呼び出されました。もし、nilのidが本当に必要なのであれば、object_idを使用してください。(訳注:mistakenly be 4の意味が分かりませんでした…。))
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
(その値が配列であることを期待していたかもしれませんが、それはnilオブジェクトです。
nil.eachの評価はエラーとなります。)
active_support.deprecation_behavior
環境別の非推奨の報告の設定を行います。 デフォルトではdevelopmentは:log、productionは:notify、testは:stderrです。 config.active_support.deprecationに値が設定されていない場合、 このイニシャライザーは現在の環境のconfig/environmentsファイル内の、 この行の設定をすることをユーザーに促します。 値の配列を設定することが可能です。
active_support.initialize_time_zone
config.time_zoneの設定を元にした、アプリケーションのタイムゾーンを設定します。 デフォルトは"UTC"です。
active_support.initialize_beginning_of_week
config.beginning_of_week settingを元にしたアプリケーションの週始まりを設定します。 デフォルトは、:mondayです。
action_dispatch.configure
config.action_dispatch.tld_lengthの値のためのActionDispatch::Http::URL.tld_lengthを設定します。
action_view.set_configs
setterとしてActionView::Baseへメソッド名を送り、値の受け渡しを通じて、 config.action_view内の設定を使用してAction Viewを設定します。
action_controller.logger
Rails.loggerへ、ActionController::Base.loggerを設定します。(まだ、設定されていなければ)
action_controller.initialize_framework_caches
Rails.cacheActionController::Base.cache_storeを設定します。(まだ、設定されていなければ)
action_controller.set_configs
ActionController::Baseへsetterとしてメソッド名を送り、値の受け渡しを通じて、 config.action_controller内の設定を使用して、アクションコントローラーを設定します。
action_controller.compile_config_methods
指定されたconfig設定へのアクセスを速くするために、メソッドを初期化します。
active_record.initialize_timezone
ActiveRecord::Base.default_timezoneをUTCに設定するのと同様、 ActiveRecord::Base.time_zone_aware_attributesをtrueに設定します。 属性はデータベースから読み込まれた際に、Time.zoneに指定されたタイムゾーンに変換されます。
active_record.logger
Rails.loggerに、ActiveRecord::Base.loggerを設定します。(まだ、設定されていなければ)
active_record.set_configs
setterとしてメソッド名をActiveRecord::Baseへ送り、値の受け渡しを通じて、 config.active_record内の設定を使用して、Active Recordを設定します。
active_record.initialize_database
config/database.ymlからデータベース設定(デフォルトで)を読み込み、 現在の環境のための接続を確立します。
active_record.log_runtime
ロガーのために、Activeレコードの呼び出しでリクエストが返ってくるのに掛かる時間のレポートを受け持つ、 ActiveRecord::Railties::ControllerRuntimeを含めます。(翻訳に自信なし)
active_record.set_dispatch_hooks
config.cache_classesがfalseに設定されていた場合、 データベースへの再読み込み可能な全ての接続をリセットします。
action_mailer.set_configs
ActionMailer::Baseへのsetterとしてメソッド名を送り、値の受け渡しを通じて、 config.action_mailer内の設定を使用してアクションメーラーを設定します。
action_mailer.compile_config_methods
指定されたconfig設定へのアクセスを速くするために、メソッドを初期化します。
set_load_path
このイニシャライザーは、bootstrap_hookの前に実行されます。 vendorlibappの全てのディレクトリ、 config.load_pathsによって指定された一部のパスが$LOAD_PATHに追加されます。
set_autoload_paths
bootstrap_hookの前にこのイニシャライザーが実行されます。 appのサブディレクトリとconfig.autoload_pathsによって指定されたパスが、 ActiveSupport::Dependencies.autoload_pathsへ追加されます。
add_routing_paths
全てのconfig/routes.rb(アプリケーションとRailtie内のエンジンを含む)を読み込み(デフォルトで)、 アプリケーションの経路の設定を行います。
add_locales
I18n.load_pathconfig/locales(アプリケーション、Railstie、エンジン)内のファイルを追加し、 これらのファイル内の翻訳を利用可能にします。
add_view_paths
アプリケーション、Railtie、エンジンがアプリケーションのビューファイルのパスを探せるように、 app/viewsのディレクトリを追加します。
load_environment_config
現在の環境のためのconfig/environmentファイルを読み込みます。
append_asset_paths
アプリケーションのアセットパスを見つけ、Railtieに全て割り当て、 config.static_asset_pathsの利用可能なディレクトリが追えるように保持します。
prepend_helpers_path
アプリケーション、Railtie、エンジンのために、検索パスにapp/helpersを追加します。
load_config_initializers
アプリケーション、Railtie、エンジン内のconfig/initializersから、全てのRubyファイルを読み込みます。 このディレクトリのファイルは、フレームワークのすべてが読み込まれた後に、行われるべき構成設定を保持するために使用することが出来ます。
engines_blank_point
エンジンが読み込まれる前に何かを行いたい場合にフックするための初期化内ポイントを提供します。(翻訳に自信なし) このポイントの後に、全てのRailtieとエンジンのイニシャライザーが実行されます。
add_generator_templates
アプリケーション、Railtie、エンジンのために、lib/templatesからジェネレーターのためのテンプレートを見つけ、 これらをconfig.generators.templatesの設定に追加し、 テンプレートを利用可能にし、全てのジェネレーターが参照出来るようにします。
ensure_autoload_once_paths_as_subset
config.autoload_once_pathsが、config.autoload_pathsからのパスだけを含める事を確定します。 もし、他のパスを含む場合、例外が発生します。
add_to_prepare_blocks
アプリケーション、Railtie、またはエンジン内の全てのconfig.to_prepare呼び出しのためのブロックが、 developmentでは各リクエストごと、またはproductionでは最初のリクエストの前に実行されるAction Dispatchのために、 to_prepareコールバックに追加されます。(翻訳に自信なし)
add_builtin_route
アプリケーションがdevelopment環境下で実行されている場合、 これはrails/info/propertiesのために、アプリケーションへ経路を追加します。 この経路は、RailsとRubyバージョンのような詳細情報を、デフォルトのRailsアプリケーション内のpublic/index.htmlへ提供します。
build_middleware_stack
リクエストのためにRack環境オブジェクトを取得する呼び出しメソッドを持つオブジェクトを返す、 アプリケーションのためのミドルウェアスタックをビルドします。(翻訳に自信なし)
eager_load!
もし、config.eager_loadがtrueであれば、config.before_eager_loadフックを実行し、 全てのconfig.eager_load_namespacesを読み込むeager_load!を呼び出します。
finisher_hook
アプリケーション、Railtie、エンジンのために、 全てのconfig.after_initializeブロック実行も含む、 アプリケーションの初期化プロセス完了後のフックを提供します。
set_routes_reloader
ActionDispatch::Callbacks.to_prepareを使用して、 経路ファイルを再読み込みするためにAction Dispatchを設定します。
disable_dependency_loading
もし、config.eager_loadがtrueに設定されていた場合、自動の依存性読み込みを無効にします。

7. データベースのプーリング

Active Recordのデータベース接続は、コネクションプールがデータベース接続の制限された数のスレッドアクセス量で同期することを保証する ActiveRecord::ConnectionAdapters::ConnectionPoolによって管理されます。 この制限のデフォルトは5で、database.ymlで設定可能です。

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

デフォルトでコネクションプーリングはActive Record内で扱われるため、 全てのアプリケーションサーバ(Thin、mongrel、Unicorn等)で同じように扱うべきです。 始めはデータベースコネクションプールは空で、必要に応じて追加のコネクションを作成し、 コネクションプールの制限に達するまでそれを行います。

リクエストは始めにデータベースへアクセスする必要があるコネクションを調べ、 その後リクエストの最後に再びコネクションを調べます。 これは、追加のコネクションスロットがキュー内の次のリクエストのために再び利用可能であることを意味します。(翻訳に自信なし)

もし、Rails.threadsafe!モードが有効なのであれば、 いくつかのスレッドが同時に複数のコネクションにアクセスしているかもしれません。 そのため、あなたの現在のリクエスト負荷に応じて、 限られた接続数で競合する複数のスレッドを持つことも可能です。(翻訳に自信なし)

 Back to top

© 2010 - 2017 STUDIO KINGDOM