initializers/something.rb
Rails.application.config.to_prepare do
#この中で、処理を書く
end
解説
to_prepare
以下でコードを渡すと、 開発環境ではリクエストの度に実行され、 プロダクションでは最初のリクエスト時に実行されるそうです。
そもそも、なんで開発環境ではコードの変更が即反映されるの?
development.rbのcache_classesがfalseになっているから。
すると、 appディレクトリ以下のコードに関しては、リクエストの度にコードがloadされるそうです。
参考:http://humanwebdevelopment.com/rails-3-application-config-to_prepare-and-initializers/
背景
- gemとして読まれているRails engineのモデルを、特定のアプリケーション内でのみ拡張したかった。
- ロジックはmoduleに書いたが、どこでそれをモデルにincludeすれば良いのか 最初分からなかった。
- initializers以下に
ModelName.send(:include, ModuleName)
で良いらしいが、それだと本記事のタイトルの現象になってしまった。