Heroku
에 unicorn
으로 배포 된 Rails 3.2에 대한 앱이 있습니다. 매 시간마다 작업을 실행해야합니다. 그래서 나는 heroku가 제공하는 Heroku Scheduler
Addon을 추가했습니다.Sideknq 및 redis가있는 Heroku 스케줄러
나는 또한 내 응용 프로그램과 Sidekiq
및 Redis
을 통합했습니다./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
문제가
설정/초기화/sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { url: ENV["OPENREDIS_URL"] }
end unless ENV['OPENREDIS_URL'].blank?
설정 : 다음
코드 스 니펫 때마다 레이크 작업이 I Heroku Scheduler에서 언급 한 명령이 실행되면 다음과 같은 오류가 발생합니다.
Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (ECONNREFUSED)
여기서 무엇이 잘못되었는지 알아 내려고 노력하고 있습니까?
업데이트 : 부수적으로 Heroku 스케줄러 작업에서만 발생합니다. 다른 배경 작업이 잘 작동합니다.
왜 작업을 예약하고 스케줄러를 사용할 필요없이 sidekiq에 모든 것을 유지하기 위해 Sidekiqs 능력을 사용할 수 있습니까? –
나는 Heroku가 일을 스케쥴하는 것을 허락하지 않는다고 생각한다. 스케줄 작업을 위해 Heroku Scheduler를 사용해야합니다. – varunvlalan
향후 실행을 위해 sidekiq 내부에서 작업을 예약 할 수 있습니다. Heroku에서 잘 작동합니다. –