2

在生产服务器上,我当然需要有不同的设置,并且与本地设置不同。

我们的开源项目托管在 github 上。因此主分支不是生产代码(至少到设置配置)。

现在,我们必须托管项目(django).. 为此,我找到的最简单的解决方案是在本地创建一个新分支,设置生产设置,将服务器 git 添加为远程,将该分支推送到远程源。

因此,我们可以随时将最新的稳定版本合并到生产分支中......轻松

但是在github中管理文件存在一些问题..

假设“proj/settings.py”中提供了 django 设置。由于系统之间的本地设置不同,我们创建了“proj/local_settings.py”来覆盖系统特定的本地设置(例如,静态文件位置).. Git 使用 .gitignore 忽略此文件

现在,如果我们在生产分支中使用这个文件来配置生产设置,并且由于它当前被忽略但 Git.. 我们不能使用它。

要将 local_settings.py 从本地生产分支推送到生产服务器,我们需要在该特定分支的 .gitignore 中删除该位置。

一切都很好,接受到这里..

实际问题来了。

当我们想将新的更改推送到生产服务器时,我们首先要将它们推送到生产本地分支,然后再推送到生产服务器......但是现在,

.gitignore 文件更改为版本中存在的内容(即再次添加 local_settings.py)

为此,每次我将某些内容合并到其中时,我都必须手动删除 production-local-branch 的 gitignore 中的 local_settings.py ...

当然以上都是一团糟..我如何轻松处理它

4

1 回答 1

1

我的建议是从您的settings.py中删除任何取决于其部署位置的设置。将这些设置放入环境变量中。例如:

STATIC_ROOT = os.environ.get('STATIC_ROOT')

那么您需要在运行网络服务器之前设置这些环境变量。

在本地:

STATIC_ROOT=`pwd`/static python manage.py runserver

在生产上取决于您的部署方式,请查阅文档。

配置到环境变量的这一原则在十二因素应用程序中公开:http ://www.12factor.net/config

于 2013-03-29T11:02:14.187 回答