Запуск mongrel2 в сценарии развертывания фабрики - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь развернуть веб-приложение в Brubeck , подобном торнадо фреймворку Python, который работает поверх mongrel2, и у меня возникают проблемы с развертыванием mongrel2 в сценарии фабрики.

Из моего fabfile:

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 ]

0 голосов
/ 02 мая 2012

Итак, поскольку на этот вопрос нет ответа, я отвечу на него с помощью обходного пути, который я использую.Я до сих пор не совсем уверен в том, что происходит (я не хочу читать документы достаточно внимательно, чтобы точно знать, что делает m2sh), но он явно делает некоторые вещи в разветвленном процессе до того, как на самом деле запустится mongrel2.Поэтому, когда эта команда возвращается и фабрика отключается, у нее не было времени закончить свою работу, и mongrel2 не запускается.

Этот обходной путь исправляет это для меня:

sudo('m2sh start -db the.db -host localhost -sudo && sleep 1')

Мне это не нравится, потому что 1 секунда - это совершенно произвольное количество времени, но оно работало каждый раз, когда я его реализовал.@ Ответ Моргана звучал так, как будто он будет работать, но, как я уже упоминал в комментарии, pty=False просто вызывает зависание ткани.

0 голосов
/ 26 апреля 2012

Вот раздел в документации для вашего варианта использования.Это связано с pty настройками вызовов по умолчанию.Больше информации в FAQ.

...