12

I am having trouble getting my dynos to run multiple delayed job worker processes.

My Procfile looks like this:

worker: bundle exec script/delayed_job -n 3 start

and my delayed_job script is the default provided by the gem:

#!/usr/bin/env ruby

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize

When I try to run this either locally or on a Heroku dyno it exits silently and I can't tell what is going on.

foreman start
16:09:09 worker.1 | started with pid 75417
16:09:15 worker.1 | exited with code 0
16:09:15 system   | sending SIGTERM to all processes
SIGTERM received

Any help with either how to debug the issue or suggestions about other ways to go about running multiple workers on a single dyno it would be greatly appreciated.

4

5 に答える 5

15

foreman を使用して、同じ dyno で複数のプロセスを開始できます。

まず、Gemfile に foreman を追加します。

次に、 Procfileworkerに次の行を追加します。

worker: bundle exec foreman start -f Procfile.workers

以下を含むProcfile.workersという名前の新しいファイルを作成します。

dj_worker: bundle exec rake jobs:work
dj_worker: bundle exec rake jobs:work
dj_worker: bundle exec rake jobs:work

これにより、ワーカー dyno で 3 つのdelayed_job ワーカーが開始されます。

于 2014-07-25T04:40:33.337 に答える
0

簡単な答えは、delayed_job ではこれを行うことができないということです。dyno はプロセスであり、単一のdelayed_jobワーカーは単一のプロセスで動作します。

ただし、これには他の解決策があります。Sidekiq の使用に切り替えることができれば、Sidekiq ワーカーはスレッド化を使用するため、1 つのプロセスでかなりの数のワーカーを実行できます。ここでのトレードオフは、ワーカーがスレッド セーフである必要があることです。

それをチェックしてください:http ://sidekiq.org/

于 2014-07-22T16:07:16.463 に答える
0

私は廃墟ビルドパックを使用して、単一の (ワーカー) dyno で Procfile.worker を実行しました: https://github.com/heroku/heroku-buildpack-runit

于 2022-02-01T03:22:11.380 に答える