Ruby on rails 延迟的作业总是立即执行

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

我有一个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)的方法

启动延迟的_作业(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