Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails会清除任务错误,而控制台等效项则不会_Ruby On Rails_Console_Rake - Fatal编程技术网

Ruby on rails Rails会清除任务错误,而控制台等效项则不会

Ruby on rails Rails会清除任务错误,而控制台等效项则不会,ruby-on-rails,console,rake,Ruby On Rails,Console,Rake,我有一段代码可以在控制台中正常工作,但是在cron驱动的rake任务中,它每次都会出错,表示其中一个has\u many关系的访问器函数不是有效的方法。例如: provider有很多实例,所以我调用provider.instances,rake任务将返回一个错误: "undefined method `instances' for "#<Provider:0x7fff1c18a5d8>":Provider" 控制台初始化: script/console production Ra

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

provider有很多实例,所以我调用provider.instances,rake任务将返回一个错误:

"undefined method `instances' for "#<Provider:0x7fff1c18a5d8>":Provider"
控制台初始化:

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

在控制台中,将为您加载rails环境

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

更新

“RAILS_ENV=生产”

只需指定您正在使用的环境即可,这样您就可以在代码中使用“ENV[“RAILS_ENV”]”

要加载rails,您需要这样做

require File.dirname(__FILE__) + "/../config/environment" require File.dirname(_File__)+“/../config/environment”
您是否告诉rake您的任务依赖于加载Rails环境

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

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

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

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

RAILS\u ENV=production指定rake加载生产RAILS环境,对吗?我认为环境加载正确,其他ActiveRecord关系正常。是的,这就是它如何设置逐字命名空间:scheduled do task:update_recurtive=>:在控制台中工作但在rake中不工作的环境do代码的方法
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