ruby-on-rails - 在 X 分钟内开始工作

标签 ruby-on-rails background-process delayed-job

我正在尝试在执行 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/

相关文章:

ruby-on-rails - rails 不会为 View 加载应用程序布局。我应该在哪里看?如何调试?

ruby-on-rails - 将 Restforce gem 与 SalesForce API 和 Oauth 2.0 结合使用

ruby-on-rails - 如何在rails中定义第二个environment.rb文件?

ios - 每天早上特定时间快速后台执行

c# - .Net Core 托管服务需要 HttpContext

vba - 无需复制/粘贴即可执行单元格值修改 - VBA

ruby-on-rails-3 - 集体运行时出现 RSpec 错误,但不是单独运行

ruby-on-rails - 模块 AbstractController::Rendering 的未定义方法 render_to_body

sql - postgres 上这个 delayed_job 查询的最佳索引是什么?

ruby-on-rails - 延迟作业泄漏内存?