初期化プロセス

参考:

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

参考:

Rails にコントリビュートした | AnyType

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

参考:

Railtie に積む位置を考える | りばーさいだー

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

config.cache_classes – 設定ファイル(config) – – Railsドキュメント

Rails全般の設定 | Rails ガイド [公式]

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です