Ruby on rails 延迟的作业总是立即执行
我有一个rails应用程序,我想在一天中的特定时间使用delayed_jobs gem在后台进程中发送文本/电子邮件。这就是我现在设置应用程序相关部分的方式:Ruby on rails 延迟的作业总是立即执行,ruby-on-rails,ruby,ruby-on-rails-4,background-process,delayed-job,Ruby On Rails,Ruby,Ruby On Rails 4,Background Process,Delayed Job,我有一个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 e
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)的方法
启动延迟的_作业(bin/delayed_job start)并创建SomeClass实例后,延迟的_作业日志如下所示:
Job SomeClass#send_reminder_without_delay (id=686) RUNNING
我不知道为什么它会毫不迟延地运行send\u employment\u,而且它每次都这样做。我已尝试在send\u提醒
方法中使用MessageHandler.new().delay.send\u message
而不是MessageHandler.new().send\u message
,但我也没有成功
我到处寻找答案,结果总是很短——任何帮助都将不胜感激 我认为您的问题在于
运行时:Proc.new{I | I.when_to_run}
我不完全确定date\u time方法的作用,但您是否检查过它是否实际返回了未来超过1小时的时间
否则,处的run_将接收过去的时间并运行该方法
如果日期\时间的返回值与此类似:
def when_to_run
Time.now - 1.hour
end
然后,一旦启动延迟作业,队列将立即运行
检查您当时的run_是否在将来运行。我们使用的是Rails 4.2并设置了队列适配器。我们需要在配置中使用这一行:
config.active\u job.queue\u adapter=:delayed\u job