在结构部署脚本中启动mongrel2

时间:2012-03-09 05:35:18

标签: fabric mongrel2

我正在尝试在Brubeck中部署一个Web应用程序,这是一个类似龙卷风的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]

基本上,我可以使用与上面相同的m2sh start命令在服务器上启动mongrel2。但是当我运行结构任务时,mkdirm2sh load任务运行正常,但是mongrel2只是没有启动。当我将它粘贴到服务器上的命令行但在部署脚本中不起作用时,任何人都知道为什么启动命令会起作用? AFAIK -sudo选项运行mongrel2作为后台进程,所以我不认为这是关闭shell的问题(我尝试使用“nohup”以防万一,但没有帮助)。我应该做一些不同的事情来启动mongrel2吗?

2 个答案:

答案 0 :(得分:0)

在您的用例文档中

Here's a section。它与默认调用的pty设置有关。常见问题解答中的更多信息。

答案 1 :(得分:0)

因此,由于这个问题没有得到解答,我将用我正在使用的解决方法回答它。我仍然不确定发生了什么(我不太仔细地阅读文档以确切地知道m2sh正在做什么),但是在mongrel2实际启动之前它显然在分叉过程中做了一些事情。所以当这个命令返回并且结构断开时,它没有时间完成它的事情并且mongrel2没有启动。

此解决方法为我解决了这个问题:

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

我不喜欢它,因为1秒是一个完全随意的时间,但自从我实施它以来它每次都有效。 @ Morgan的回答听起来很有用,但正如我在评论pty=False中提到的那样,只会导致布料挂起。