Запуск 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.

Другие вопросы по тегам