2012-03-09 22 views
0

我試圖在Brubeck中部署一個web應用,這是一種在mongrel2上運行的類似龍捲風的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嗎?

回答

0

因此,由於此問題尚未得到解答,我將使用我正在使用的解決方法來回答問題。我仍然不確定發生了什麼事情(我不在乎仔細閱讀文檔以確切知道m2sh在做什麼),但顯然在mongrel2實際啓動之前在分叉過程中做了一些事情。所以當這個命令返回並且結構斷開時,它沒有時間完成它的事情,並且mongrel2沒有啓動。

此變通方法修復它爲我:

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

我不喜歡它,因爲1秒的時間完全任意的量,但它一直每次都因爲我實現了它。 @摩根的回答聽起來像是會起作用的,但正如我在評論pty=False中所提到的,這隻會導致織物掛起。

0

Here's a section在您的使用案例的文檔中。它與默認調用的pty設置有關。更多信息在FAQ中。

+0

感謝您的鏈接,這是很好的知道。出於某種原因,當我使用'pty = False'像FAQ建議那樣運行該命令時,結構進程凍結並且服務器未啓動。任何想法爲什麼?作爲一種解決方法,我在命令的末尾添加了&& sleep 1',並且一直在工作。 – danny 2012-04-26 17:55:19