使用fabric来操纵数据库连接

时间:2012-04-25 18:41:12

标签: python deployment fabric

我刚开始使用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

在找到结构之前,我将使用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中运行openwrite是否有意义?我假设我还必须.gitignore这些类型的文件,因此它们不会被提交到repo中,只需依靠Fabric来部署它们。

我计划根据我目前使用getfqdn交换或手动调整的所有配置设置调整最佳建议方法。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以从env.host中完成所有这些操作,然后使用类似the contrib template function的内容来呈现conf文件并将其推送。但在这些情况下模板最好(参见:puppet和其他配置管理器)