config.cache_classes = true时缺少方法

时间:2013-09-05 19:58:20

标签: ruby-on-rails ruby

我有两个名为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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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