我正在尝试在执行控制器操作后3分钟执行一项工作。
我尝试使用DelayedJob:
# in my controller
def index
@books = Book.all
Delayed::Job.enqueue(ReminderJob.new(params[:user_id]))
end
在ReminderJob.rb
文件中:
class ReminderJob < Struct.new(:user_id)
def perform
p "run reminder job"
# do something
end
handle_asynchronously :perform, :run_at => Proc.new { 3.minutes.from_now }
end
但是,在访问索引页面时,我没有在日志中看到任何内容,3分钟后没有任何反应。
我做错了什么?是否有另一种推荐的方法来“在现在的X分钟内”运行任务而不使用sleep
?
答案 0 :(得分:2)
在这种情况下,我会使用rails&#39;内置名为ActiveJob
的包。
请参阅here如何设置和基本用法。你可以use delayed_job as the backend。
在您的情况下,此代码可以正常运行:
def index
user = User.find(params[:user_id])
ReminderJob.set(wait: 3.minutes).perform_later(user)
end
和你的工作:
class ReminderJob < ApplicationJob # assumes you have a /app/jobs/application_job.rb
def perform(user)
# do something with the user
end
end