0

我正在尝试在Brubeck中部署一个 Web 应用程序,这是一个在 mongrel2 之上运行的类似龙卷风的 python 框架,但我无法在结构脚本中部署 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 。但是当我运行fabric任务时,mkdirandm2sh load任务运行良好,但是mongrel2只是没有启动。任何人都知道为什么当我将它粘贴到服务器上的命令行时该启动命令会起作用但在部署脚本中不起作用?AFAIK -sudo 选项将 mongrel2 作为后台进程运行,所以我认为这不是关闭 shell 的问题(我尝试使用“nohup”以防万一,但这没有帮助)。我应该做一些不同的事情来启动 mongrel2 吗?

4

2 回答 2

0

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

此解决方法为我修复了它:

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

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

于 2012-05-02T16:52:38.863 回答
0

这是文档中针对您的用例的部分。它与默认调用的 pty 设置有关。常见问题解答中的更多信息。

于 2012-04-26T00:46:09.483 回答