web-dev-qa-db-ja.com

Rails:HerokuでSidekiqを開始する

HerokuでデプロイされたRailsアプリでSidekiqを起動して実行するのに問題があります。開発中(およびSidekiqのないHeroku上)でアプリが正常に動作しています。

Procfileを作成しました:

_worker: bundle exec sidekiq
_

_heroku ps_を実行した場合、表示されるプロセスは_web.1_だけです。

Sidekiqに表示する必要がありますか?

エラーが発生します:

HerokuログのRedis::CannotConnectError (Error connecting to Redis on localhost:6379).

更新:おそらく_heroku addons:add redistogo_が必要だとわかりました。まだ動かない。基本的な設定が不足しているように感じます。

HerokuアプリでRedisを起動して実行するために必要なことはありますか?

私は約1日間Redis/Sidekiqを使用しているので、これは私にとって新しいものです。

ありがとう!

グレッグ

39
Greg Rogers

いいえ、Heroku for Sidekiqの設定は必要ありません。RedisToGoプラグインを追加するだけです。 Heroku configでアプリに少なくとも1workerを割り当てることを忘れないでください。

デフォルトのProcfileは次のとおりです。

web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
53
gdurelle

Sidekiqプロセスが次のコマンドで実際に開始されているかどうかを確認する価値があります。

heroku ps

ワーカーがない場合は、次のコマンドを実行する必要があります。

heroku ps:scale worker+1

一部のチームメンバーは、UIがそれを示しているように見えても、ワーカーの数を0から1に増やすことを許可されていないという点で、Web UIにバグがあることがわかりました!

35
justingordon

Sidekiqバージョン3.0以降、追加のステップがあり、heroku config:set REDIS_PROVIDER=REDISTOGO_URLコンソールで。

Rails 4:に使用したプロセスは次のとおりです。

コンソールで:

heroku addons:create redistogo
heroku config:set REDIS_PROVIDER=REDISTOGO_URL

私のProcfileに以下を追加しました:

worker: bundle exec sidekiq

私のgemfile.rb 追加した:

gem 'redis'

次のファイルを追加しました、config/initializers/redis.rb

uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
REDIS = Redis.new(:url => uri)

Sidekiqドキュメントへの link を次に示します。

16
Steve

もちろん、現在のジョブキューと一緒にsidekiqを実行できます。

現在、Procfileは次のようになっています。

web: bundle exec thin start -R config.ru -e $Rails_ENV -p $PORT
worker:  bundle exec rake jobs:work
sidekiq: bundle exec sidekiq -c 5 -v
1
superluminary

Gdurelleの回答を補完する:

SidekiqのHerokuでいくつかの設定が必要です。

1)私の場合、SidekiqおよびRedis gemsを(gemfileにバンドルされて)インストールします。

Gemfile

gem 'redis', '~> 3.1'
gem 'sidekiq', '~> 2.7', '>= 2.7.1'

2)ワーカーを追加します。ローカルにワーカーが作成されていない場合は、念のため、少なくとも1つ作成することをお勧めします。

Rails g sidekiq:worker Hard # will create app/workers/hard_worker.rb

これを作成する必要があります:

app/workers/hard_worker.rb

class HardWorker
  include Sidekiq::Worker
  def perform(name, count)
    # do something
  end
end

3)Redisアドオンを追加します(私の場合はHeroku Redis):

heroku addons:create heroku-redis:hobby-dev

4)私の場合、redis.rbファイルを追加します。

config/initializers/redis.rb

$redis = Redis.new(url: ENV["REDIS_URL"])

5)Procfileまたはconfig/sidekiq.yml、またはその両方を追加します。ここに私のものがあります。

Procfile

worker: bundle exec sidekiq -c 1 -q default -q mailers 

これを端末に貼り付けると簡単に作成できます

echo "worker: bundle exec sidekiq -c 1 -q default -q mailers" > Procfile

config/sidekiq.yml

:concurrency: 1
:queues:
  - [mailers, 7]
  - [default, 5]

6)最も重要な部分 こちら :  ワーカーのスイッチをオンにし、鉛筆をクリックしてから、不足しているスイッチをオンにします。これでうまくいくはずです。素晴らしい一日を!

1
Jose Paez

私が見つけたのは、次のようにプロセスを手動でスケーリングする必要があることです:

heroku ps:scale worker+1

私のProcfileが言ったので意味がありません:

web: bundle exec....
worker: bundle exec sidekiq

...そして、Herokuがワーカーを自動的に起動することを期待していました。最終的に、Webプロセスをスケーリングする必要はありませんでした...

また、次の行に問題がある可能性があります。worker:bundle exec sidekiq

一致のフラグを追加します。

worker: bundle exec sidekiq -c 5 -v
1
luigi7up

あなたはほとんどそこにいるように聞こえます。 heroku config ?でREDISTOGO_URLを設定するだけでよい場合があります

heroku config 

redistogo値を表示する必要がありますか?

これをREDISTOGO_URLにコピーすると、sidekiqは機能しますか?

heroku config:add REDISTOGO_URL=<redistogo value>

Edit:Sidekiqは現在、これらのいずれかを使用します: https:// github。 com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L29-L

Edit2:Gregは正しいので、設定を追加する必要はありません。 RedisToGoを使用します。ただし、OpenRedisまたは他のRedisプロバイダーを使用している場合は、SidekiqにREDISTOGO_URLを追加する必要があります

1
gef