gpt4 book ai didi

python - 如何告诉 Fabric 当前站点的角色是什么?

转载 作者:行者123 更新时间:2023-12-01 05:55:24 24 4
gpt4 key购买 nike

我在 fabfile.py 中只有一个命令:

@role('dev')
def test():
local('...')

现在,我可以在每个命令中使用 --role=dev,但这非常愚蠢。

我想要的是将我的项目安装在主机上一次,并具有一定的角色,然后使用它,而无需重复此参数。

最佳答案

我通常在 fabfile.py 中包含以下内容:

if not len(env.roles):
env.roles = ["test"]

这表示如果 env.roles 未定义(例如通过命令行),则在我的情况下应将其定义为“测试”。因此,在您的情况下,我将更改上述内容,以用 dev 替换 test,因此您将拥有:

if not len(env.roles):
env.roles = ["dev"]

通过这样做,您应该会发现您获得了您正在寻找的行为,同时为您提供了覆盖的能力(如果您将来需要的话)。

编辑:我正在编辑此内容以包含一个小示例 fabfile.py 和用法说明。

env.roledefs = {
'test': ['test.fabexample.com'],
'stage': ['stage.fabexample.com'],
'prod': ['web01.fabexample.com', 'web02.fabexample.com', 'web03.fabexample.com'],
}
# default role will be test
env.roles = ['test']

def git_pull():
run("git pull")

def deploy():
target = "/opt/apps/FOO"
with cd(target):
git_pull()
sudo("service apache2 restart")

现在,这个 fabfile 将允许我将代码部署到三个不同环境中的任何一个:“test”、“stage”或“prod”。我通过命令行选择要部署到的环境:

fab -R stage deploy

或者,

fab --role=stage deploy

如果我指定角色结构,则由于设置了 env.roles,角色结构将默认为“test”。并不是说 Fabric 不用于对本地盒子执行任何操作,而是作用于 env.roledefs 中定义的本地盒子(或多个盒子),尽管经过一些修改,它可以在本地工作也是如此。

通常,fabric 命令是从开发盒中使用来在测试、登台或生产盒上远程执行这些操作,因此通过命令行指定角色并不是“极其愚蠢”,而是在这种情况下是设计使然。

关于python - 如何告诉 Fabric 当前站点的角色是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com