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)
で良いらしいが、それだと本記事のタイトルの現象になってしまった。