セルヒオと同じ提案があります。Sidekiqバックグラウンドワーカーの宝石を試してみてください。Mongoidで動作するkiqstandミドルウェアがあります。
大まかなスケッチ:
# 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は、MongoidMongodb接続を処理する必要があります。タスクを分割するために、最初のワーカーにフィードする2番目のワーカーを作成できます。に送信される引数はImportWorker.perform_async(my_var)
シリアル化されてRedisに格納されるため、引数は小さくする必要があります。この場合は、行参照などです。
それがいくつかの指針を与えることを願っています。