3

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

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

4

1 回答 1

0

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

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

这会触发环境以重新加载范围类,并且任务运行良好。

pbobb 可能一直在使用保留词 thing,尽管奇怪的是,该应用程序仍然可以在所有环境中工作,否则。

于 2013-09-06T11:03:22.770 回答