config.cache_classes = true时缺少方法

我有两个名为Scope和ScopeItem的ActiveRecord模型,它具有has_many关系:

class Scope < ActiveRecord::Base has_many :scope_items end class ScopeItem < ActiveRecord::Base belongs_to :scope end 

我还有一个后台作业的rake任务来加载一堆范围(引用)数据:

  task :scopes => :environment do scope = Scope.create!( # params ) 5.times do |n| scope.scope_items.create!({ # more params }) end end end 

rake任务在开发中运行良好,但是当我转移到临时/生产设置时,任务失败,说Scope没有名为scope_items的方法。

我比较了两种环境中的设置,并通过实验确定如果我更改以下设置,我可以重现开发中的错误:

 # development.rb config.cache_classes = false # !development.rb config.cache_classes = true # all others use this 

在我看来,当打开此设置时,加载路径会发生变化。 这是真的,如果是的话,是否有解决方法?

我们通过添加以下内容找到了rake任务的解决方法:

 My::Application.configure do config.cache_classes = false end load "#{Rails.root}/app/models/scope.rb" 

这会使环境重新加载范围类,并且任务运行正常。

pbobb可能已经使用了保留字的东西,尽管奇怪的是应用程序仍然可以在所有环境中工作。