Ruby on rails 在X分钟内开始作业

Ruby on rails 在X分钟内开始作业,ruby-on-rails,background-process,delayed-job,Ruby On Rails,Background Process,Delayed Job,我正在尝试在控制器的操作执行3分钟后运行作业 我试过这个,用DelayedJob: # in my controller def index @books = Book.all Delayed::Job.enqueue(ReminderJob.new(params[:user_id])) end 并且在rementerjob.rb文件中: class ReminderJob < Struct.new(:user_id) def perform p "run remi

我正在尝试在控制器的操作执行3分钟后运行作业

我试过这个,用DelayedJob:

# in my controller

def index
  @books = Book.all
  Delayed::Job.enqueue(ReminderJob.new(params[:user_id]))
end
并且在
rementerjob.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
类提醒作业Proc.new{3.minutes.from_now}
结束
然而,当访问索引页面时,我在日志中没有看到任何内容,3分钟后什么也没有发生


我做错了什么?有没有其他建议的方法可以在“从现在起X分钟内”不使用
睡眠运行任务

在本例中,我将使用rails的内置包
ActiveJob
。 请参阅如何设置和基本用法。你可以

在您的情况下,此代码将起作用:

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
class-rementerjob
你读过吗?为什么不使用rails内置的
ActiveJob
?@RaVeN我无法用ActiveJob说“在X分钟内启动此作业”。这可能吗?您可以使用
ExampleJob.set(等待:3.minutes)。稍后执行(用户id)
。我写了一个答案来解释这个解决方案。