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可能已经使用了保留字的东西,尽管奇怪的是应用程序仍然可以在所有环境中工作。