2009-03-30 15 views
2

私は手書きのバリデータでActiveRecordにパッチを当てるレールアプリケーションを持っています。クラスキャッシュはどのようにレールで動作しますか?

パッチが、それはcache_classesと開発では動作しません。しかし、これは

config.cache_classes = true 

でつまり本番モードで正常に動作するのconfig/environment.rbにで

Rails::Initializer.run do |config| 
...  
end 

class ActiveRecord::Base 
    include MtLib::DBValidations 
end 

を次の行を追加することにより行われますfalseに設定します。

スローエラーがある

 
    ArgumentError (A copy of MtLib::DBValidations has been removed from 
     the module tree but is still active!): 

私の質問cache_classがfalseに設定されている場合は続いているプロセスは何かということです。 Railsはどの初期化メソッドを再実行しますか?それ以外の場合は、私のパッチを置いて、すべてのモデルにあり、クラスの再読み込みを生き延びるための最良の場所はどこですか?

config/initializers/active_record_patchにパッチを追加しようとしましたが、クラスを再読み込みするときに再実行されません。

答えて

2

Ruby On Rails googleグループのFrederick Cheungが提供するソリューションは、ロードされたクラスを含むディレクトリをload_once_path配列に追加します。

私はこの

config.load_paths += 
    %W(#{RAILS_ROOT}/lib/soap_clients/carefone #{RAILS_ROOT}/lib/mt_lib) 

    # Make sure load_once_paths is a subset of load_paths 
    config.load_once_paths += %W(#{RAILS_ROOT}/lib/mt_lib) 

に見えるようにenvironment.rbに編集そして今、これはすべてのリクエスト

にサーバをリロードすることなく開発モードで動作します
関連する問題