2

なぜ私のレーキタスクが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.rbworkersディレクトリ内で、コンソールから自分で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を実行する場合、すべてのタスクをリストダウンします

あなたは得るでしょう[]

タスクをロードするようにワーカークラスに指示する必要があります。これを試して

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 に答える