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を使用しているので、これは私にとって新しいものです。
ありがとう!
グレッグ
いいえ、Heroku for Sidekiqの設定は必要ありません。RedisToGoプラグインを追加するだけです。 Heroku configでアプリに少なくとも1workerを割り当てることを忘れないでください。
デフォルトのProcfileは次のとおりです。
web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
Sidekiqプロセスが次のコマンドで実際に開始されているかどうかを確認する価値があります。
heroku ps
ワーカーがない場合は、次のコマンドを実行する必要があります。
heroku ps:scale worker+1
一部のチームメンバーは、UIがそれを示しているように見えても、ワーカーの数を0から1に増やすことを許可されていないという点で、Web UIにバグがあることがわかりました!
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 を次に示します。
もちろん、現在のジョブキューと一緒に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
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)最も重要な部分 こちら : ワーカーのスイッチをオンにし、鉛筆をクリックしてから、不足しているスイッチをオンにします。これでうまくいくはずです。素晴らしい一日を!
私が見つけたのは、次のようにプロセスを手動でスケーリングする必要があることです:
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
あなたはほとんどそこにいるように聞こえます。 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を追加する必要があります