在X分钟内开始工作

时间:2016-07-25 09:47:49

标签: 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

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

1 个答案:

答案 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