Rails3で、developmentモードなのにファイルを更新してブラウザリロードしても反映されなかった
【追記 2014-06-05】 クラスがキャッシュしているように見えたのは、 RubyやRailsがイカれた訳でもなんでもなく、 システム日付を未来にしていたからのようでした...。 Railsがファイル更新を確認するのは、ファイルの更新日時が 初回の読み込み時より新しいときのみ。 今回はシステム日付を10年後にしていました。 ファイルの最終更新が10年後なので、 2014年現在でいくら更新しようと、更新を検知しません。 とても初歩的なミス...!てへぺろっ!
環境
Ruby : 2.0.0-p451
Rails : 3.2.14
大変だった。
ドはまりした...。
タイミングはよく覚えていないけど、
症状 :
開発環境でゴリゴリコードを書いていたら急にソースの変更をしても反映されなくなりました。
1.ソース変更
2.ブラウザでリロード
3.反映を確認 ←変更されていない..!
viewsファイルの変更は反映されるが、controllerやmodelのクラスファイルの変更が反映されない..、なぜ。
要は、development.rbの設定に反してクラスファイルがキャッシュしている模様。
再起動すればしっかり、ソースの変更が反映されます。
development.rb
config.cache_classes = false config.action_controller.perform_caching = false
設定はこんな感じ。
cache_classesはコントローラとかモデルとかのクラスファイルを、サーバの起動時に一度だけ読む込む様な設定。
falseなので、キャッシュしない(=都度クラスファイルを読み込む)設定。
action_controller.perform_cachingは所謂ページキャッシュと呼ばれるもので、viewのファイルなどをキャッシュするかどうかの設定です。
合ってるよなぁ...さっきまで動いてたし。
インターネッツの英知に頼ってみても、この設定であっているようだ。
ActiveSupportのAutoloadあたりがイカレたのかな?
と思い、gemの再インストール実施も効果なし。
詰んだか?
一からRailsのdocを読んでみると、ソレらしいconfigの設定を発見!
config.reload_classes_only_on_change = ( true | false ) ファイルの変更検知の設定をする。 依存関係のあるファイルに変更があった場合に、クラスを再読み込みするようになる。 config.cache_classesが「true」の場合は、無視される。
値をfalseにしてサーバーを再起動...
反映された....
しかし、根本的な解決ではないな。