せたがやえんじにあぶろぐ

Ruby | Rails | iPhone | Web

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にしてサーバーを再起動...

反映された....


しかし、根本的な解決ではないな。