我有一个rails应用程序,其中我想使用delayed_jobs gem在一天中的某些时间在后台进程中发送文本/电子邮件。这就是我现在设置应用程序相关部分的方法:
class SomeClass
after_create :send_reminder
def when_to_run
self.date_time - 1.hour
end
def send_reminder
MessageHandler.new().send_message
end
handle_asynchronously :send_reminder, run_at: Proc.new { |i| i.when_to_run }, queue: "Messages"
end
MessageHandler类是我定义的一个单独的类,它实际上包含发送文本(使用Twilio)和电子邮件(使用Mailgun)的方法。
启动delayed_job(bin / delayed_job start)并创建SomeClass实例后,delayed_job日志内容如下:
Job SomeClass#send_reminder_without_delay (id=686) RUNNING
我不确定它为什么运行send_reminder_without_delay,而且每次都在执行它。我尝试在MessageHandler.new().delay.send_message
方法中使用send_reminder
而不是MessageHandler.new().send_message
,但这也没有让我到处找。
我已经搜索过高低的答案并且不断提出 - 任何帮助都会非常感激!
答案 0 :(得分:0)
我认为您的问题出在t
。
我不完全确定date_time方法的作用,但是你确定它是否实际返回的时间超过1小时?
否则run_At将在过去收到一个时间并运行该方法。
如果date_time的返回值与此类似:
run_at: Proc.new { |i| i.when_to_run }
然后,一旦你开始延迟工作,队列就会运行。
检查您的run_at时间是否为将来。
答案 1 :(得分:0)
我们使用Rails 4.2并设置队列适配器。我们需要在配置中使用这一行:
config.active_job.queue_adapter = :delayed_job