首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Fabric文件中设置目标主机

如何在Fabric文件中设置目标主机
EN

Stack Overflow用户
提问于 2010-02-24 22:45:11
回答 9查看 66.1K关注 0票数 108

我想使用Fabric将我的web应用程序代码部署到开发、暂存和生产服务器。我的fabfile文件:

代码语言:javascript
复制
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

示例输出:

代码语言:javascript
复制
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列表对象”。根据我的观察,这根本不是真的。

有人能解释一下这是怎么回事吗?如何设置要部署到的主机?

EN

回答 9

Stack Overflow用户

发布于 2011-06-11 08:22:43

使用roledefs

代码语言:javascript
复制
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的角色:

代码语言:javascript
复制
$ fab -R test deploy
[localhost] Executing task 'deploy'
...
票数 77
EN

Stack Overflow用户

发布于 2011-06-17 16:31:04

这是一个更简单的serverhorror's answer版本

代码语言:javascript
复制
from fabric.api import settings

def mystuff():
    with settings(host_string='192.0.2.78'):
        run("hostname -f")
票数 49
EN

Stack Overflow用户

发布于 2010-03-10 17:52:17

您需要设置host_string,示例如下:

代码语言:javascript
复制
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, ))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2326797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档