2

我不明白为什么我的 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的 inworkers目录,如果我可以从控制台自己手动调用 rake 任务,问题一定出在哪里?

require 'rake'

module SendThisEmailWorker
  @queue = :send_this_email

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

当我启动我的开发服务器时,这个send_this_emailrake 任务应该每 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
4

1 回答 1

9

只有require 'rake'是不够的。例如,如果您执行 Rake::Task.tasks #list down all task

你会得到[]

您需要告诉您的工人阶级加载任务。尝试这个

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

于 2013-05-06T09:30:41.993 回答