2

Rails3.2にでデプロイされているアプリがありHerokuますunicorn。1時間ごとにジョブを実行する必要があります。そこでHeroku Scheduler、herokuが提供するアドオンを追加しました。

私も自分のアプリと統合Sidekiqしました。Redis

コードスニペットは次のとおりです。

config / initializer / sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?

config / unicorn.rb

worker_processes 2
timeout 30
preload_app true

before_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
    Rails.logger.info('Disconnected from ActiveRecord')
  end

  Rails.logger.info('Disconnected from Redis')

  sleep 1
end

after_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end

  Sidekiq.configure_client do |config|
    config.redis = { url: ENV["OPENREDIS_URL"] }
  end unless ENV['OPENREDIS_URL'].blank?

  Rails.logger.info('Connected to Redis')
end

問題は次のとおりです。Herokuスケジューラで説明したrakeタスクを実行すると、次のエラーが発生します。

Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (ECONNREFUSED)

ここで何が悪いのかを理解しようとしていますか?

更新:ちなみに、これはHerokuスケジューラータスクでのみ発生します。他のバックグラウンドジョブは正常に機能しています。

4

2 に答える 2

4

最後に、Sidekiqクライアント構成をに追加して機能させましたsidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?

Sidekiq.configure_client do |config|
  config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
于 2013-03-25T15:10:00.107 に答える
0

1つのオプションは、URLを空のままにして、REDIS_PROVIDER環境変数をOPENREDIS_URLに設定することです。

于 2013-03-25T07:44:14.643 に答える