ruby-on-rails-3 - 如何使用 Sidekiq 运行连续的后台作业?

标签 ruby-on-rails-3 ruby-on-rails-3.2 sidekiq

我一直在成功地使用 Sidekiq 来运行由 Rails 3.2 应用程序中的用户操作启动的后台作业。我的特定应用程序涉及通过第三方 API 从外部源发送和接收数据。

我需要通过不断检查每个用户是否有可下载的数据来保持数据与此外部源同步。

到目前为止,我所有的后台工作都是用户启动的,如上所述。我的问题是,如果我想在 while 中持续检查每个用户是否存在外部数据我想象的循环:

# pseudocode
while true

  for user in User.active
    data = user.get_data
    next if data.blank?

    UserDataWorker.perform_async(user.id)

  end
end

那么我把上面的代码放在哪里呢?我对如何产生连续任务感到困惑。我不想将代码放在 Sidekiq 工作器中,因为它只是一个永远不会完成的工作。还是我应该这样做?

我不想把它放在一个 rake 任务中,因为那我如何监控那个 rake 任务?我读到的关于 Sidekiq 的所有内容似乎都指向一个 Worker 正在运行一个有限且能够完成或出错的任务。我很感激你能提供的任何帮助。

最佳答案

Ruby 多线程就是为了这个。在您的 initializers 文件夹中生成一个线程:

Thread.new do

  loop do

    for user in User.active
      data = user.get_data
      next if data.blank?

      UserDataWorker.perform_async(user.id)
    end

    sleep 1

  end
end

如果你的支票不需要太多资源,应该没问题。

关于ruby-on-rails-3 - 如何使用 Sidekiq 运行连续的后台作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812784/

相关文章:

ruby-on-rails-3 - Rails 3 - 创建复选框(与 _destroy 相对)

ruby-on-rails - 预期图像(#70365286921100),得到数组(#70365535770260)错误

json - Rails 3.2 - ActiveResource - 在 JSON 中使用 POST/PUT

ruby-on-rails - Sidekiq 和 rails 4 actionmailer 从不发送电子邮件

sql - 导轨 : A database-independent datatype that's suitable for bitwise operations

ruby-on-rails - 如何使用 Redis 跟踪每日和每周的活跃用户?

jquery - Rails 3.2.1 上的 morris.js 无法从 html 获取 json

ruby-on-rails - 通过一定数量的记录后清除内存

ruby-on-rails - 检测哪些 Sidekiq 作业导致高内存使用率

ruby-on-rails - 在不同的 Controller 中渲染表单部分(非嵌套)