2012-07-22 27 views
7

爲什麼:面料env.hosts和相同的方法運行=>無主機發現

from fabric.api import env, run 

env.hosts = ['apycat'] 

def update(): 
    run('cd /var/www/menu; svn up') 

做:

from fabric.api import env, run 

def update(): 
    env.hosts = ['apycat'] 
    run('cd /var/www/menu; svn up') 

不,當我fab update,而工作?

在文檔中沒有找到關於此的任何內容。

+0

非常類似的問題:http://stackoverflow.com/questions/2326797 /如何對設置目標主機功能於織物文件;這個問題的答案解決您的具體問題:http://stackoverflow.com/a/5465497/16363 – Mark 2012-07-22 18:32:07

回答

7

在fab命令已經創建了fab任務的主機列表後,指定主機列表將不起作用。因此,對於第一個示例,更新任務沒有設置主機列表,然後允許以下run()操作。這是is here的文檔中的一個很好的部分。

但是它也應該指出,你可以得到一個像第一個工作在兩種方式之一的用例。先用設置爲()上下文管理器:

def foo(): 
    with settings(host_string='apycat'): 
     run(...) 

另用較新的API函數是執行():

def bar(): 
    run(...) 

def foo(): 
    execute(bar, hosts=['apycat']) 
相關問題