Rails Rake任务错误输出,而控制台等效没有

时间:2009-09-27 22:47:53

标签: ruby-on-rails console rake

我有一段代码可以在控制台中正常工作,但是在cron驱动的rake任务中,它每次都会出错,并说其中一个has_many关系的访问器函数不是一个有效的方法。例如:

提供者has_many实例,所以我正在调用provider.instances,rake任务将返回错误:

"undefined method `instances' for "#<Provider:0x7fff1c18a5d8>":Provider"

在控制台中,粘贴的相同功能可以正常工作。

佣金电话:

rake RAILS_ENV=production scheduled:update_recurring --trace

控制台初始化:

script/console production

Rails版本2.3.2

看到明显的东西?

更新: rake文件的设置如下:

namespace :scheduled do
    task :update_recurring => :environment do
        Stuff that worked in console but not rake here
    end
end

3 个答案:

答案 0 :(得分:0)

在您的控制台中,为您加载了rails环境。

我希望您在创建rails任务时加载了rails环境。

更新

“RAILS_ENV =生产”

只是指定你所使用的环境,所以你可以在代码中使用“ENV [”RAILS_ENV“]”。

加载您需要执行此操作的导轨。

  require File.dirname(__FILE__) + "/../config/environment" 

答案 1 :(得分:0)

您是否告诉rake您的任务依赖于加载Rails环境?

namespace :scheduled do
 task :update_recurring => :environment do
   ...
 end 
end

答案 2 :(得分:0)

我有同样的问题。我能让它工作的唯一方法是重新加载导致错误的类。

task :my_task => :environment do
  load "#{Rails.root}/app/models/my_class.rb" # Needed to do this

  foo = MyClass.create(my_attr: 'bar') # my_attr will be nil (huh??) unless I load the class
  foo.items.create(...) # This is the has_many that failed before loading the class
end

就像类加载器加载了类名一样,但它没有得到任何定义。