2013-03-25 3 views
2

Herokuunicorn으로 배포 된 Rails 3.2에 대한 앱이 있습니다. 매 시간마다 작업을 실행해야합니다. 그래서 나는 heroku가 제공하는 Heroku Scheduler Addon을 추가했습니다.Sideknq 및 redis가있는 Heroku 스케줄러

나는 또한 내 응용 프로그램과 SidekiqRedis을 통합했습니다./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 스케줄러 작업에서만 발생합니다. 다른 배경 작업이 잘 작동합니다.

+0

왜 작업을 예약하고 스케줄러를 사용할 필요없이 sidekiq에 모든 것을 유지하기 위해 Sidekiqs 능력을 사용할 수 있습니까? –

+0

나는 Heroku가 일을 스케쥴하는 것을 허락하지 않는다고 생각한다. 스케줄 작업을 위해 Heroku Scheduler를 사용해야합니다. – varunvlalan

+0

향후 실행을 위해 sidekiq 내부에서 작업을 예약 할 수 있습니다. Heroku에서 잘 작동합니다. –

답변

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? 
0

하나의 옵션은 URL을 비워두고 REDIS_PROVIDER 환경 변수를 OPENREDIS_URL로 설정하는 것입니다.