Rake任务没有从worker中运行

时间:2013-03-21 19:49:20

标签: ruby-on-rails redis rake resque

我不明白为什么我的rake任务没有从resque工作者中运行。正在运行

rake :send_this_email
从控制台

工作正常,我只想将它作为一个cron作业运行(如下所示),但是当从工作者中调用rake任务时,某些东西不能正常工作。

我的rescue_schedule.yml

send_this_email:
  cron: "*/2 * * * *"
  class: SendThisEmailWorker 
  args:
  description: "Send email when condition defined in rake task is met"

我在send_this_email_worker.rb目录中的workers,如果我可以从控制台手动调用rake任务,问题必定在哪里?

require 'rake'

module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    Rake::Task["send_this_email"].invoke
  end
end

当我启动我的开发服务器时,这个send_this_email rake任务应该每2分钟运行一次吗?它不是,resque管理面板将其显示为队列中的作业。我在这里缺少什么?

感谢您的关注。

从gerep评论更新

require 'rake'

module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    puts "Hi from the console, I'm started"
    Rake::Task["send_this_email"].invoke
  end
end

1 个答案:

答案 0 :(得分:8)

只有require 'rake'是不够的。例如,如果你这样做    Rake :: Task.tasks #list关闭所有任务

您将获得[]

您需要告诉您的worker类加载任务。 试试这个

require 'rake'
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
YOUR_APP_NAME::Application.load_tasks
module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    puts "Hi from the console, I'm started"
    Rake::Task["send_this_email"].invoke
  end
end

YOUR_APP_NAME是您应用的名称,可在config/application.rb

找到