我有一段代码,它运行一些方法,我把这个方法放在self里面。
class StartWorker
@queue = :worker
def self.perform
puts "hello"
Parser.find_all_by_class_name("Parser").first.sites.each do |s|
site = Site.find(s.id)
parser = Parser.new(site)
parser.run
end
end
end
字符串
如果我注解了def self. perform并结束此操作并运行文件,它会正确显示所需的结果,但当我试图通过取消注解将其作为后台任务时,它会默默地失败到resque面板中,什么也不显示。
我在resque_schedule. yml中从resque-scheduler排队
start_worker:
cron: "55 6 * * *"
class: StartWorker
queue: worker
args:
description: "This job starts all the worker jobs"
型
我尝试在defself.perform方法中放入一些简单的put语句,以检查控件是否在方法内部传递,但似乎控件甚至没有在self.perform方法内部传递
我还尝试加载rails环境,并要求在其中重新排序,但没有用,我已经运行了bundle exec rake resque:work QUEUE ='*'脚本,用于所有上述内容,然后再进行任何更改
我在rails控制台中试了www.example.com,它显示为这样,
{:working=>0, :queues=>1, :failed=>1, :environment=>"development", :servers=>["redis://localhost:6379/0"], :pending=>0, :processed=>1, :workers=>1}
型
任何想法如何克服这一点?
2条答案
按热度按时间gz5pxeao1#
1.你有没有检查resque-web面板,看看失败的作业是什么?
1.请确保在进行任何更改后重新启动workers。
1.如果你没有在你的日志中看到'hello'(特别是log/worker.log或你的日志),那么这个功能就不会发生。
bundle exec rake resque:work QUEUE='*'
应该是bundle exec rake resque:work QUEUE=*
,以防万一你真的引用了bundle exec rake resque:work QUEUE=*
。6l7fqoea2#
为我工作:
字符串
Ruby:
3.0.3
,Resque:2.2.0
,Resque-push4.5.0
,Rails:6.1.4.4