我正在尝试在执行 Controller 操作 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 分钟后什么也没有发生。
我做错了什么 ?是否有另一种推荐的方法可以在不使用
sleep
的情况下“在 X 分钟内”运行任务? ?
最佳答案
在这种情况下,我将使用 rails 的内置包 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
关于ruby-on-rails - 在 X 分钟内开始工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38564501/