我有一个使用Postgres数据库的Django应用程序。
我有一个Chef配方,可以设置Postgres数据库,包括为Django应用程序设置Postgres用户名/密码。
然后,这个用户名/密码由DATABASES settings.py值使用。
目前,我必须在attributes.rb和settings.py中都有Postgres细节。如何只在一个地方拥有它们?
我目前考虑的选项:
1. 通过Chef模板生成settings.py(或其一部分)。这样,细节只需要在Chef配方中。这种方法的缺点是,除非通过Chef部署,否则Django应用程序不完整。(这可能并不是太大的问题,因为即使是本地开发也是使用vagrant+chef完成的)。 2. 在文件系统上有一个已知的文件,settings.py检查并从中加载一些值。这个文件由Chef生成。这只比第一种解决方案好一点。此外,它需要一些样板代码在settings.py中加载和解析该文件。 3. 在settings.py中添加细节,并让Chef提取它们(以某种方式)。这种方法有问题,因为它会混淆Chef配方中的顺序(我必须检出我的Django应用程序,提取值,使用这些值设置Postgres,然后启动Django)。这本身可能并不太糟糕,但真正的问题出现在我想要移动到密码不在源控制文件中而是在像Chef数据包这样的东西中的系统时。
我已经搜索了很多,但除了关于settings.py布局和如何使用Django和Chef的一般讨论之外,我找不到一个好的解决方案。肯定有其他人使用Chef部署过带有Postgres的Django应用程序,并且遇到过这个问题吧?
我有一个Chef配方,可以设置Postgres数据库,包括为Django应用程序设置Postgres用户名/密码。
然后,这个用户名/密码由DATABASES settings.py值使用。
目前,我必须在attributes.rb和settings.py中都有Postgres细节。如何只在一个地方拥有它们?
我目前考虑的选项:
1. 通过Chef模板生成settings.py(或其一部分)。这样,细节只需要在Chef配方中。这种方法的缺点是,除非通过Chef部署,否则Django应用程序不完整。(这可能并不是太大的问题,因为即使是本地开发也是使用vagrant+chef完成的)。 2. 在文件系统上有一个已知的文件,settings.py检查并从中加载一些值。这个文件由Chef生成。这只比第一种解决方案好一点。此外,它需要一些样板代码在settings.py中加载和解析该文件。 3. 在settings.py中添加细节,并让Chef提取它们(以某种方式)。这种方法有问题,因为它会混淆Chef配方中的顺序(我必须检出我的Django应用程序,提取值,使用这些值设置Postgres,然后启动Django)。这本身可能并不太糟糕,但真正的问题出现在我想要移动到密码不在源控制文件中而是在像Chef数据包这样的东西中的系统时。
我已经搜索了很多,但除了关于settings.py布局和如何使用Django和Chef的一般讨论之外,我找不到一个好的解决方案。肯定有其他人使用Chef部署过带有Postgres的Django应用程序,并且遇到过这个问题吧?
settings.py
读取它)。这是你的意思吗? - Sujaysettings.py
,并传递读取的值。 - Draco Ater