2011-08-11 13 views
5

Z powodzeniem używam resque na stosie cedru heroku i montuję interfejs na szynach.Resque na stosie cedru Heroku Licznik pracownika wciąż istnieje po zakończeniu pracy przez pracownika

kiedy uruchamiam pracownika, wszystko działa poprawnie. Pracownik przetwarza zadanie. Ale kiedy zabiję pracownika, Resque nadal uważa, że ​​pracownik jest dostępny. Kiedy zaczynam innego pracownika, wtedy wydaje mi się, że jest 2 pracowników, ale w rzeczywistości jest tylko jeden uruchomiony.

Zauważam tu również formularz http://devcenter.heroku.com/articles/ps, że heroku wysyła SIGTERM po zabiciu pracownika, a jeśli to się nie kończy, wysyła SIGKILL.

tutaj jest mój pracownik loguje

2011-08-11T02:32:45+00:00 heroku[worker.1]: Starting process with command `bundle exec rake resque:work QUEUE=*` 
2011-08-11T02:32:46+00:00 heroku[worker.1]: State changed from starting to up 
2011-08-11T02:33:58+00:00 heroku[worker.1]: State changed from up to stopping 
2011-08-11T02:34:00+00:00 heroku[worker.1]: Stopping process with SIGTERM 
2011-08-11T02:34:09+00:00 heroku[worker.1]: Error R12 (Exit timeout) -> Process failed to exit within 10 seconds of SIGTERM 
2011-08-11T02:34:09+00:00 heroku[worker.1]: Stopping process with SIGKILL 
2011-08-11T02:34:11+00:00 heroku[worker.1]: Process exited 

widzę, że mój proces trwa więcej niż 10s, aby zakończyć. Czy to ma coś zrobić, ponieważ ładuję środowisko szyn w zadaniu robota?

to jest moje zadanie natarcia lib/tasks/resque.rake

require "resque/tasks" 

task "resque:setup" => :environment 

Odpowiedz

5

Właśnie dowiedziałem się problem, to się stało podczas przechodzenia ENV na zadania natarcia. jak przy przejściu QUEUE='*'.

Oto problem pełniejsze https://github.com/defunkt/resque/issues/319#issuecomment-1789239

a problem nadal są w paletek w https://github.com/defunkt/resque/issues/368

każdy mój tymczasowy poprawki, które sprawiają, że Resque uruchomić tylko wszystko que.

https://github.com/yulrizka/resque

+0

można również oczyścić z konsola łącząca się z redis i działającą .del ("pracownicy") – Bob

2

ahmy,

oparciu o rozwiązania, wpadłem na taki, który nie wiąże się rozwidlone Resque.

kładę to na resque.rake:

task "resque:setup" => :environment do 
    ENV['QUEUE'] = '*' 
end 

i umieścić to w Profile:

worker: bundle exec rake resque:work 

i umieścić to w Gemfile:

gem 'resque', :git => 'git://github.com/defunkt/resque.git' 
Powiązane problemy