Resque на стеке кедра Heroku Количество рабочих все еще существует после завершения рабочего - PullRequest
5 голосов
/ 11 августа 2011

Я успешно запустил resque на стеке кедра heroku и установил интерфейс на рельсах.

когда запускаю рабочий, все отлично работает. Рабочий обрабатывает работу. Но когда я убиваю работника, Resque все еще думает, что работник доступен. Когда я запускаю другого работника, то думаю, что есть 2 работника, но на самом деле работает только один.

Я также замечаю здесь форму http://devcenter.heroku.com/articles/ps, что героку отправляет SIGTERM при убийстве рабочего и, если это не прекращается, то отправляет SIGKILL.

вот мои рабочие журналы

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

Я вижу, что моему процессу требуется более 10 секунд для завершения. Это как-то связано с тем, что я загружаю рельсы в рабочую задачу?

это мое задание по рейку lib/tasks/resque.rake

require "resque/tasks"

task "resque:setup"  => :environment

Ответы [ 2 ]

5 голосов
/ 12 августа 2011

Я только что обнаружил проблему, это произошло при прохождении ENV на грабли. как при прохождении QUEUE='*'.

Вот вопрос, более полный https://github.com/defunkt/resque/issues/319#issuecomment-1789239

и проблема все еще обсуждается на https://github.com/defunkt/resque/issues/368

любой мой временный патч, который заставляет resque запускать только все очереди.

https://github.com/yulrizka/resque

2 голосов
/ 25 августа 2011

Ахми,

Основываясь на вашем решении, я придумала решение, которое не требует разветвления.

Я поместил это в resque.rake:

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

и поместите это в Profile:

worker:  bundle exec rake resque:work

и поместите это в Gemfile:

gem 'resque', :git => 'git://github.com/defunkt/resque.git'
...