У меня есть кластер из трех mongrels, работающих под nginx, и я развертываю приложение, используя Capistrano 2.4.3. Когда я «закрываю развертывание», когда есть работающая система, это поведение:Capistrano не перезапускает кластеры Mongrel правильно
- Приложение развернуто. Код успешно обновлен.
В выходном колпачке развертывания, есть это:
- выполнения «Суд -p 'Sudo пароль:' mongrel_rails кластер :: перезагружать -C /вар/WWW/Рельсы/MyApp/ток/конфиг/mongrel_cluster.yml»
- серверов: [ "MyIP"]
- [MyIP] выполнение команды
- ** [из :: MyIP] останавливая порт 9096
- ** [из :: MyIP] останавливая порт 9097
- ** [из :: MyIP] останавливая порт 9098
- ** [из :: MyIP] уже начал порт 9096
- ** [из :: MyIP] уже начал порт 9097
- ** [ out :: myip] уже начато порт 9098
- Я проверяю немедленно на сервере и обнаруживаю, что Mongrel все еще работает, и файлы PID все еще присутствуют для предыдущих трех экземпляров.
- Спустя короткое время (менее одной минуты) я обнаружил, что Mongrel больше не работает, файлы PID исчезли, и он не смог перезапустить.
- Если я запускаю mongrel на сервере вручную, приложение запускается просто отлично.
Перед попыткой перезагрузки кластера кажется, что кластер mongrel_rails :: restart 'должным образом не ждет полной остановки . Как мне диагностировать и устранить эту проблему?
EDIT: Вот ответ:
mongrel_cluster, в задаче «перезагрузки», просто делает это:
def run
stop
start
end
Это не делает никакого ожидания или проверки, чтобы увидеть, что процесс вышел перед тем вызывая «начало». Это a known bug with an outstanding patch submitted. Я применил патч к кластеру Mongrel, и проблема исчезла.
Это на правильном пути. См. Мое редактирование на вопрос: есть исправление для mongrel_cluster, которое исправляет поведение. – Pete 2008-10-02 16:53:12