我正在尝试创建一个模块来保存 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 关键字更新函数中的值看起来真的很难看。