我想使用Fabric将我的web应用程序代码部署到开发、暂存和生产服务器。我的fabfile文件:
def deploy_2_dev():
deploy('dev')
def deploy_2_staging():
deploy('staging')
def deploy_2_prod():
deploy('prod')
def deploy(server):
print 'env.hosts:', env.hosts
env.hosts = [server]
print 'env.hosts:', env.hosts
示例输出:
host:folder user$ fab deploy_2_dev
env.hosts: []
env.hosts: ['dev']
No hosts found. Please specify (single) host string for connection:
在创建Fabric docs中所示的set_hosts()
任务时,可以正确设置env.hosts。然而,这不是一个可行的选择,装饰器也不是。在命令行上传递主机最终会导致调用fabfile的某种shell脚本,我更喜欢用一个工具来正确地完成这项工作。
它在Fabric文档中说“env.hosts只是一个Python列表对象”。根据我的观察,这根本不是真的。
有人能解释一下这是怎么回事吗?如何设置要部署到的主机?
发布于 2011-06-11 08:22:43
使用roledefs
from fabric.api import env, run
env.roledefs = {
'test': ['localhost'],
'dev': ['user@dev.example.com'],
'staging': ['user@staging.example.com'],
'production': ['user@production.example.com']
}
def deploy():
run('echo test')
选择具有-R的角色:
$ fab -R test deploy
[localhost] Executing task 'deploy'
...
发布于 2011-06-17 16:31:04
这是一个更简单的serverhorror's answer版本
from fabric.api import settings
def mystuff():
with settings(host_string='192.0.2.78'):
run("hostname -f")
发布于 2010-03-10 17:52:17
您需要设置host_string
,示例如下:
from fabric.context_managers import settings as _settings
def _get_hardware_node(virtualized):
return "localhost"
def mystuff(virtualized):
real_host = _get_hardware_node(virtualized)
with _settings(
host_string=real_host):
run("echo I run on the host %s :: `hostname -f`" % (real_host, ))
https://stackoverflow.com/questions/2326797
复制相似问题