Ruby on rails ActiveRecord迁移&;Rake任务不加载模型?

Ruby on rails ActiveRecord迁移&;Rake任务不加载模型?,ruby-on-rails,activerecord,migration,rake,Ruby On Rails,Activerecord,Migration,Rake,我知道您可以这样做来加载rails环境: task :my_task => :environment do MyModel.find(1) end 但是模型中的代码似乎没有被执行。我使用acts_作为_审计,并且有一个很好的类函数,它检索所有正在审计的模型。这个电话看起来像: Audit.audited_classes 要将模型指定为可审核的,只需将以下行添加到模型中: acts_as_audited 当在控制台中执行已审核的类时,我会得到所有已审核类的数组;然而,

我知道您可以这样做来加载rails环境:

  task :my_task => :environment do 
    MyModel.find(1)
  end
但是模型中的代码似乎没有被执行。我使用acts_作为_审计,并且有一个很好的类函数,它检索所有正在审计的模型。这个电话看起来像:

Audit.audited_classes
要将模型指定为可审核的,只需将以下行添加到模型中:

acts_as_audited
当在控制台中执行已审核的类时,我会得到所有已审核类的数组;然而,当我在rake任务(或迁移)中执行它时,我会得到一个空数组

[编辑]

在进一步研究之后,我注意到,如果模型在被引用之前没有实际加载(即延迟加载)。我认为在配置中将cache_类设置为true可以解决这个问题,但它们似乎仍然是延迟加载的

一个可能的解决方案是循环使用所有模型(如本文所述:),但这似乎有点老套,我希望有一种更干净的方法

有什么想法吗


谢谢

您可以添加config/environments/development.rb:

Dir[Rails.root.join('app', 'models', '**/*')].each { |file| File.basename(file, '.rb').camelize.constantize }

当您使用config.threadsafe时会发生这种情况!在生产环境中,它会自动设置config.dependency\u load=false。这可以防止rails在rake任务期间加载模型类

解决这个问题的方法是在环境文件中设置“config.dependency\u load=true if$rails\u rake\u task”。例如,在my production.rb中,我有:

config.threadsafe!
config.dependency_loading = true if $rails_rake_task
或者你也可以这样做

config.threadsafe! unless $rails_rake_task

是的…我已经在做了,但这是一个黑客行为…我在这里提交了一张罚单:这不适用于名称空间模型,我不认为。您是否遇到过名称空间的用例?