Ruby on rails rails 2.2+中的类缓存是如何工作的;

Ruby on rails rails 2.2+中的类缓存是如何工作的;,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个rails应用程序,它用手工编码的验证器修补ActiveRecord 修补程序是通过在config/environment.rb中添加以下行来完成的 Rails::Initializer.run do |config| ... end class ActiveRecord::Base include MtLib::DBValidations end 这在生产模式下工作良好,即 config.cache_classes = true 但是,当cac

我有一个rails应用程序,它用手工编码的验证器修补ActiveRecord

修补程序是通过在config/environment.rb中添加以下行来完成的

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

class ActiveRecord::Base  
  include MtLib::DBValidations  
end  
这在生产模式下工作良好,即

config.cache_classes = true  
但是,当cache_类设置为false时,它在开发中不起作用

抛出的错误是

ArgumentError (A copy of MtLib::DBValidations has been removed from the module tree but is still active!): ArgumentError(已从中删除MtLib::DBValidations的副本 模块树,但仍处于活动状态!): 我的问题是,当cache_class设置为false时,将遵循什么过程。Rails是否重新运行任何初始化方法?如果不是的话,那么我最好把补丁放在哪里,以确保它在所有模型中都存在,并且能够在类重新加载后存活


我已经尝试将补丁添加到config/initializers/active_record_补丁中,但是在重新加载类时,不会重新运行该补丁。

解决方案由Ruby on Rails google group上的Frederick Cheung提供,将包含加载类的目录添加到load_once_路径数组中

我将environment.rb编辑成这样

 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)  
现在,它可以在开发模式下工作,而无需在每次请求时重新加载服务器