【发布时间】:2012-09-07 18:25:42
【问题描述】:
我正在尝试创建一个模块来保存 Fabric 文件的配置。此配置文件将保存项目相关设置,因此我可以为所有项目使用相同的 fabfile。
我希望 fabfile 看起来像这样:
import config
from fabric.api import local
def deploy(env='staging'):
config.env = env
local("xcopy {project_dir} {deploy_target} /u /r /y".format(project_dir=config.project_dir,
deploy_target=config.deploy_target))
#Ok, this will be more involved than that, but it is enough to explain my problem
配置文件如下所示:
env = 'staging'
project_dir = r'c:\some\unimportant\path'
deploy_target = r'c:\some\target\path\based\on\{env}'.format(env=env)
所以我可以使用:
fab deploy 或 fab deploy:staging 部署到暂存环境,fab deploy:production 部署到生产环境。
我想弄清楚的是如何在 env 变量发生变化时更新模块中的变量。
我希望我的配置文件尽可能简单,理想情况下,只是变量赋值,但如果真的需要,我可以使用一些函数。设置文件中会有很多变量,所以在函数中更新值,使用 global 关键字看起来真的很难看。
【问题讨论】:
-
部署时是否需要永久更改配置文件,或者部署完成后恢复默认值是否可以?后者应该很容易,但前者要复杂得多。
-
配置文件在每个项目的基础上都是唯一的。 config.py 模块中的设置几乎是一成不变的。他们不会经常改变。每个项目通常只有 2-3 个环境。路径非常相似,只是改变了几个字符,有时是服务器名称,但仅此而已。
-
部署后返回默认值是可以的,因为 fabfile 中的所有命令都将采用 env 参数,该参数将在配置模块中相应地设置值(如果我设法实现我的目标尝试做)。
标签: python module config fabric