初期化プロセス
参考:
Rails の初期化プロセス | Rails ガイド [公式]
Railtie の initializer が読み込まれる仕組み | freedom-man
Rails::Initializer を読む。| walf443’s blog
Rails::Railtie を流し読み | 不格好エンジニア
Booting process – Rails::Application | Ruby on Rails API [Official]
イニシャライザで設定できないケース
参考:
Rails.application.config を config/initializers/*.rb で書き換えても反映されないケース – Qiita
Rails の time_zone の設定は initializers/* には書かない – Qiita
initializer
参考:
Rails 5 で追加された initializer のまとめ | 日々雑記
initializer – Rails::Application | Ruby on Rails API [Official]
initializer – rails/initializable.rb at v5.2.2 · rails/rails – GitHub
rails の config/initializer ってどういうものなのですか? – teratail
Creating an initializer – Stack Overflow
run_initializers
参考:
rails/initializable.rb at v5.2.2 · rails/rails – GitHub
initialized?
アプリケーションがイニシャライズ済みの場合、true
を返す。
Rails.application.initialized?
参考:
initialized? – Rails::Application | Ruby on Rails API [Official]
イニシャライザの読み込み順
参考:
rails5 の initializer の読み込み順序を検証 – Qiita
How do I change the load order of initializers in Rails 3? – Stack Overflow
実行されるイニシャライザを一覧表示する
$ rails initializers
参考:
config.before_initialize
参考:
before_initialize – Rails::Railtie::Configuration | Ruby on Rails API [Official]
環境毎にイニシャライザを読み込む
参考:
Better way to organize Rails initializers – Stack Overflow
LazyLoadHooks
ActiveRecord::Base
がロードされたタイミングで初期化する。(ロード済みの場合、on_load
に渡されたブロックは即時に実行される。)
イニシャライザで ActiveRecord::Base
はオープンクラスしてはいけない。イニシャライザで ActiveRecord::Base
をオープンクラスしてしまうと、それ以後のイニシャライザのconfig
が反映されなくなる。
initializer "active_record.initialize_timezone" do ActiveSupport.on_load(:active_record) do # initialization on loading ActiveRecord::Base end end
参考:
ActiveSupport.on_load と run_load_hooks のコードリーディング | feedom-man
config/initializers/new_framework_xxx.rb が効かなかったときのハマりメモ
ActiveSupport::LazyLoadHooks | Ruby on Rails API [Official]
イニシャライザで ActiveRecord::Base をオープンクラスするべきでない
参考:
config/initializers/new_framework_xxx.rb が効かなかったときのハマりメモ
bin/rails の役割
参考:
Rails は bin/rails が無いと起動できない | freedom-man
Bundler による gem の読み込み
参考:
rails を起動すると gem はどのように読み込まれてんのか | onody_onody’s blog
リロード/定数の再読み込み
定数の再読み込みを可能にするために、動的にインスタンスを取得するような実装を行う。
# app/models/auth_service.rb class AuthService if Rails.env.production? def self.instance RealAuthService end else def self.instance MockedAuthService end end end
参考:
自動読み込みとイニシャライザ | Rails ガイド [公式]
Reload rails initializers – Stack Overflow
イニシャライザを上書きする
参考:
ActiveRecord::Railtie のイニシャライザを上書きする – Qiita
イニシャライザの設定をテストする
参考:
Testing Code in a Rails Initializer | Code Climate
active_recored.initialize_database
参考:
ActiveRecord::Railtie のイニシャライザを上書きする – Qiita
ブランチごとに DB 切り替えるヤツ作った | AnyType
rails/railtie.rb at v5.2.2 · rails/rails – GitHub
開発環境でイニシャライザの設定は自動的に再読み込みされない
イニシャライザの処理はサーバー起動時の一回のみ行われる。
定数リロード時にイニシャライザは実行されない。定数リロード時に何らかの処理を適用するためには config.to_prepare
を使用する。
イニシャライザを再実行するためにはサーバーを再起動する必要がある。Spring 使用時には spring stop
を実行して Spring サーバーを再起動する。
参考:
initializers ディレクトリに書いたコードが、開発環境でリセットされるときの解決法 – Qiita
Rails Engine でマウントする側のモデルとされる側のモデルの association | mmag
デコレータとコードの読み込みに関するメモ | Rails ガイド [公式]
How can I keep my initializer configuration from being lost in development mode? – Stack Overflow
configuration block in Initializers folder not working in development | reddit
config.cache_classes
config.cache_classes
は、アプリのクラスやモジュールをリクエストごとに再読み込みするか (=キャッシュしないかどうか) どうかを指定する。
config.cache_classes
のデフォルト値は、development モードでは false
なのでコードの更新がすぐ反映され、test モードと production モードでは true
なので動作が高速になる。同時に threadsafe!
をオンにすることもできる。
参考:
Rails の config/enviroments 配下を読んでみる – Qiita