我刚刚开始使用 Fabric 来更好地控制测试和部署环境的特定设置,并且我正在尝试了解交换配置的最佳方法。
假设我的应用程序中有一个模块,它默认定义了一个简单的数据库连接和一些用于身份验证的常量:
host = 'db.host.com'
user = 'someuser'
passw = 'somepass'
db = 'somedb'
class DB():
def __init__(self,host=host,user=user,passw=passw,db=db,cursor='DictCursor'):
#make a database connection here and all that jazz
在我找到fabric之前,我会使用库中的getfqdn()
函数socket
来检查系统被推送到的主机的域名,然后对身份验证凭据进行条件化。
if getfqdn() == 'test.somedomain.com':
host = 'db.host.com'
user = 'someuser'
passw = 'somepass'
db = 'somedb'
elif getfqdn() == 'test.someotherdomain.com':
host = 'db.other.com'
user = 'otherguy'
passw = 'otherpass'
db = 'somedb'
出于显而易见的原因,这真的不是那么好。我想知道的是在 Fabric 中调整此类内容的最聪明的方法是什么,以便当项目被推送到某个测试/部署服务器时,这些值会在推送后更改。
仅通过查看文档,我就可以想到一些方法。我是否应该有一个文件只定义 Fabric 可以根据部署使用 shell 命令输出的常量,然后定义数据库处理程序的文件可以导入它们?像这样在 fabfile中运行open
和运行是否有意义?write
我假设我还必须处理.gitignore
这些类型的文件,这样它们就不会被提交到 repo 中,而只是依靠 Fabric 来部署它们。
getfqdn
我计划采用最适合我当前使用或手动调整的所有配置设置的方法。谢谢!