У меня есть кластер из трех шавок, работающих под nginx, и я развертываю приложение, используя Capistrano 2.4.3. Когда я "ограничиваю развертывание", когда есть работающая система, поведение:
- Приложение развернуто. Код успешно обновлен.
В выводе cap deploy есть это:
- выполнение "sudo -p 'sudo password:'
кластер mongrel_rails :: перезагрузка -C
/var/www/rails/myapp/current/config/mongrel_cluster.yml"
- серверы: ["myip"]
- [myip] выполнение команды
- ** [out :: myip] остановочный порт 9096
- ** [out :: myip] остановочный порт 9097
- ** [out :: myip] остановочный порт 9098
- ** [out :: myip] уже запустил порт 9096
- ** [out :: myip] уже запустил порт 9097
- ** [out :: myip] уже запустил порт 9098
- Я немедленно проверил на сервере и обнаружил, что Mongrel все еще работает, и PID-файлы все еще присутствуют в предыдущих трех экземплярах.
- Через некоторое время (менее одной минуты) я обнаружил, что Mongrel больше не работает, файлы PID пропали, и он не смог перезапуститься.
- Если я запускаю mongrel на сервере вручную, приложение запускается нормально.
Кажется, что 'mongrel_rails cluster :: restart' неправильно ожидает полной остановки
перед попыткой перезапуска кластера. Как мне диагностировать и исправить эту проблему?
РЕДАКТИРОВАТЬ: Вот ответ:
mongrel_cluster, в задаче "перезагрузка", просто делает это:
def run
stop
start
end
Он не ждет и не проверяет, завершился ли процесс, прежде чем вызывать «start». Это известная ошибка с выдающимся патчем . Я применил патч к Mongrel Cluster, и проблема исчезла.