2012-11-29 2 views
1

문제는 :내 앱을 영웅에게 넘길 때 resque worker를 자동화하여 코드를 업데이트 할 수 있습니까?

나는 노동자가 수행하는 코드의 변경을 할 때 나는 새로운 코드를 밀어 후, Heroku가에 실행 노동자는 여전히 이전에 실행합니다.

그럼 수동으로 멈추고 다시 시작해야합니다. 하지만 그 잘못은 노동자가 직업을 수행 할 수 있고 등록이 해제 될 때까지 기다려야하기 때문입니다.

이 내 resque.rake 내가 Heroku가 내 응용 프로그램을 누르면, 작업자가 새로운 코드로 업데이트 할 수 있는지 알고 싶습니다

require 'resque' 
require "resque/tasks" 

task "resque:setup" => :environment do 
    ENV['QUEUE'] = '*' if ENV['QUEUE'].blank? 

    Resque::Worker.all.each {|w| w.unregister_worker} 
    Resque.after_fork do |job| 
    ActiveRecord::Base.establish_connection 
    end 
end 

task "resque:clean_workers" => :environment do 
    Resque::Worker.all.each {|w| w.unregister_worker} 
end 

desc "Alias for resque:work (To run workers on Heroku)" 
task "jobs:work" => "resque:work" 

Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file } 

입니다. 어떻게 할 수 있니?

감사합니다.

+0

이전 작업자가 아직 실행 중이십니까? 헤로 꾸 로그는 푸시 후 어떤 모습입니까? 'heroku ps'는 어때? – willglynn

+0

배포 후 "0 of 1 Workers"가 표시되지만 더럽습니다. 그것은 그 자체로 heroku에게 맹세합니다. 나는'heroku run : detached bundle exec rake resque : work QUEUE = *'로 resque를 실행 중이다. 감사합니다 – Luccas

답변

2

Heroku는 heroku run을 통해 생성되는 일회용 프로세스를 제외하고는 배포시 모든 프로세스를 플랫폼 기능으로 다시 시작합니다.

worker: bundle exec rake resque:work QUEUE=* 

푸시 한 다음 근로자를 실행하는 Heroku가 말씀 :

Procfile에 작업자 프로세스 유형을 추가

$ heroku ps:scale worker=1 
Heroku가 이제 단일 worker 다이노 실행이 있는지 확인합니다

항상. 앱을 다시 시작하면 (예 : 푸시 후, heroku restart, rollback) 또는 작업자가 어떻게 든 죽거나 호스트가 실패한 경우 자동으로 다시 시작됩니다. Heroku는 매일 새 호스트에서 작업자 프로세스를 정상적으로 종료하고 다시 시작할 것입니다. 임시 파일을 제거하고 메모리 누수를 막고 dyno 그리드 주변의 부하를 재조정하면 좋은 조치입니다.

프로덕션 환경에서 연중 무휴로 백그라운드 작업을 실행하는 경우 원하는 동작입니다.

+0

고마워요! 나는 procfile 안에 worker를 넣을 것이다 :'worker : bundle exec rake worker : all'. 그건 resque 레이크 작업과 내 다른 사람 sqs 작업을 호출해야합니다 – Luccas

관련 문제