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スケジューラータスクでのみ発生します。他のバックグラウンドジョブは正常に機能しています。