9

为什么:

from fabric.api import env, run

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

当 I 时不起作用fab update,而:

from fabric.api import env, run

env.hosts = ['apycat']

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

做?

在文档中没有找到任何关于此的内容。

4

1 回答 1

7

在 fab 命令已经为 fab 任务创建主机列表之后指定主机列表将不起作用。因此,对于第一个示例,您的更新任务没有设置主机列表,然后允许以下 run() 操作。文档中的一个很好的部分是here

但还应该注意的是,您可以获得一个像第一个这样的用例,以两种方式中的一种方式工作。首先是 settings() 上下文管理器:

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

另一个是使用较新的 api 函数 execute():

def bar():
    run(...)

def foo():
    execute(bar, hosts=['apycat'])
于 2012-07-22T18:36:36.420 回答