Запуск mongrel2 в сценарии развертывания фабрики
Я пытаюсь развернуть веб-приложение в Brubeck, похожем на торнадо python-фреймворке, который работает поверх mongrel2, и у меня возникают проблемы с развертыванием mongrel2 в матричном сценарии.
Из моего фабфайла:
with cd(project_dir):
run('mkdir -p run && mkdir -p log && mkdir -p tmp')
run('m2sh load -config mongrel2.conf -db the.db')
sudo('m2sh start -db the.db -host localhost -sudo')
и мой mongrel2.conf очень простой:
brubeck_handler = Handler(
send_spec='ipc://127.0.0.1:9999',
send_ident='34f9ceee-cd52-4b7f-b197-88bf2f0ec378',
recv_spec='ipc://127.0.0.1:9998',
recv_ident='')
brubeck_host = Host(
name="localhost",
routes={
'/': brubeck_handler})
brubeck_serv = Server(
uuid="f400bf85-4538-4f7a-8908-67e313d515c2",
access_log="/log/mongrel2.access.log",
error_log="/log/mongrel2.error.log",
chroot="./",
default_host="localhost",
name="brubeck app",
pid_file="/run/mongrel2.pid",
port=6767,
hosts = [brubeck_host]
)
settings = {"zeromq.threads": 1}
servers = [brubeck_serv]
В принципе, я могу нормально запустить mongrel2 на сервере, используя тот же m2sh start
команда, как указано выше. Но когда я запускаю задание ткани, mkdir
а также m2sh load
задачи выполняются нормально, но тогда mongrel2 просто не запускается. Кто-нибудь знает, почему эта команда запуска будет работать, когда я вставлю ее в командную строку на сервере, но не работает в сценарии развертывания? AFAIK Опция -sudo запускает mongrel2 как процесс фонового режима, поэтому я не думаю, что это проблема закрытия оболочки (на всякий случай я попытался использовать nohup, но это не помогло). Должен ли я делать что-то другое, чтобы начать mongrel2?
2 ответа
Поэтому, поскольку на этот вопрос не было ответа, я отвечу на него с помощью обходного пути, который я использую. Я до сих пор не совсем уверен, что происходит (мне все равно, чтобы прочитать документы достаточно внимательно, чтобы точно знать, что m2sh
делает), но он явно делает некоторые вещи в разветвленном процессе до того, как на самом деле запускается mongrel2. Поэтому, когда эта команда возвращается и фабрика отключается, у нее не было времени закончить свою работу, и mongrel2 не запускается.
Этот обходной путь исправляет это для меня:
sudo('m2sh start -db the.db -host localhost -sudo && sleep 1')
Я не люблю это, потому что 1 секунда - абсолютно произвольное количество времени, но это работало каждый раз, когда я реализовал это. Ответ @ Моргана звучал так, как будто он будет работать, но, как я уже упоминал в комментарии pty=False
просто заставляет ткань висеть.
Вот раздел в документации для вашего варианта использования. Это связано с pty настройками вызовов по умолчанию. Больше информации в FAQ.