在生产服务器上,我当然需要有不同的设置,并且与本地设置不同。
我们的开源项目托管在github上。因此,主分支不是生产代码(至少达到设置配置)。
现在,我们必须主持项目(django)..为此,我找到的最简单的解决方案是在本地创建一个新分支,设置生产设置,将服务器git添加为远程,将该分支推送到远程源。
因此,我们可以随时将最新的稳定版本合并到生产分支中..轻松
但是在github中管理文件存在一些问题..
假设django设置在“proj / settings.py”中提供。由于系统与系统之间的本地设置不同,我们创建了“proj / local_settings.py”来覆盖系统特定的本地设置(例如,静态文件位置).Git使用.gitignore
忽略此文件。现在,如果我们在生产分支中使用此文件来配置生产设置,并且因为它当前被忽略但是Git ..我们无法使用它。
要将local_settings.py从本地生产分支推送到生产服务器,我们需要删除该特定分支中.gitignore中的该位置。
一切都很好,直到这里才被接受..
这是实际问题。
当我们想要将新的更改推送到生产服务器时,我们首先将它们推送到生产本地分支,然后推送到生产服务器......但是现在,
.gitignore文件更改为在发布中存在(即再次添加local_settings.py)
为此,我必须在每次合并内容时手动删除production-local-branch的gitignore中的local_settings.py ...
当然上面所有都是一团糟......如何轻松处理
答案 0 :(得分:1)
我建议您从 settings.py 中删除任何取决于其部署位置的设置。将这些设置放入环境变量中。例如:
STATIC_ROOT = os.environ.get('STATIC_ROOT')
然后您需要在运行Web服务器之前设置这些环境变量。
在当地:
STATIC_ROOT=`pwd`/static python manage.py runserver
生产取决于您的部署方式,请参阅文档。
这个配置到环境变量的原则在Twelve Factor App中公开:http://www.12factor.net/config