ruby-on-rails-3 - Heroku Rails 排队 mongoid

标签 ruby-on-rails-3 heroku mongoid

我需要处理一个包含 10,000 条记录的 csv 文件。每 100 条记录大约需要 4 秒,我对此很满意。
我希望能够将 10,000 条记录拆分为 100 个作业,这些作业将在服务器不忙时执行(无需订单)。

我正在使用heroku,如果可以的话,我很乐意将处理分发到几个节点。

这里的最佳实践是什么?如何处理mongo连接?如何拆分作业并创建将来运行的任务?

不需要完整的解决方案,只需要一些指导。

最佳答案

我和 Sergio 有同样的建议。尝试Sidekiq背景 worker gem 。有kiqstand使其与 Mongoid 一起使用的中间件。

可能的粗略草图:

# Gemfile
gem 'kiqstand'
gem 'sidekiq'


# Procfile
web: ...
worker: bundle exec sidekiq -e $RACK_ENV -C config/sidekiq.yml


# config/sidekiq.yml
#
# Configuration file for Sidekiq.
# Options here can still be overridden by cmd line args.
---
:verbose: false
:namespace: sidekiq
:concurrency: 25
:queues:
  - [often, 7]
  - [default, 5]
  - [seldom, 3]


# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  # Require kiqstand middleware
  config.server_middleware do |chain|
    chain.add Kiqstand::Middleware
  end
end

# app/workers/import_worker.rb
# The actual Sidekiq worker that performs the input
class ImportWorker
  include Sidekiq::Worker

  def perform(my_var)
    # processing the csv
  end
end  

Sidekiq 和 Kiqstand 应该处理 Mongoid Mongodb 连接。为了分割任务,您可以创建第二个工作人员来为第一个工作人员提供服务。由于发送到 ImportWorker.perform_async(my_var) 的参数将被序列化并存储在 Redis 中,因此它们应该很小,在您的情况下只是一个行引用左右。

希望能给大家一些指点。

关于ruby-on-rails-3 - Heroku Rails 排队 mongoid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812329/

相关文章:

ruby-on-rails-3 - 多表继承 Rails 和 activerecord

ruby-on-rails - rails : How to use dependent: :destroy in rails?

heroku - 导轨 5 : How can I get Google Analytics to work?

ruby - 更改 mongoid 关系的名称 (embeds_...,belongs_to,has_...)

ruby-on-rails - RSpec:如果未直接引用对象,则expect.to 接收失败

ruby-on-rails - 这个 Rspec 测试有什么问题

ruby-on-rails - Rails 的优惠券/促销代码解决方案(gem)?

ruby - 如何更改 Docker 镜像中的 Ruby 版本(将 2.2.0 替换为 2.0.0 )

ruby-on-rails-3 - Heroku 需要配置什么才能处理基于 CoffeeScript 的模板?

ruby-on-rails - 将对象的实例调用到另一个 Controller 轨中