2017-01-19 97 views
0

我无法理解从本地切换到生产设置以部署Django项目。如果有问题,我正在使用Ubuntu虚拟机(VM)。在Django中实现生产设置

我了解如何配置我的设置。我了解创建设置文件的最佳做法(base.py,local.py,production.py,blah,blah)。我知道在本地开发DEBUG = True,在生产DEBUG = False,等等,等等。

但是我怎么实现这个转换,在部署?我是否摆脱了local.py?我是否创建了某种逻辑,以便我的VM只读取base.py和production.py?

什么是最好的方法?

+0

我会建议你避免多重设置文件,而是使用[Django的ENVIRON(https://github.com/joke2k/django-environ)来处理不断变化的设置环境变量。结帐[12-factor-app](https://12factor.net) –

+0

感谢Gustavo的回复。你的建议确实很诱人。然而,我有要求和应用程序,我不想在生产(测试应用程序,文档生成器等)的东西。直到我找出一个更清晰的解决方案,现在我会保留我的settings.local.py版本控制,并始终从生产准备git回购部署。保重。 –

回答

0

我不知道的最好的办法,但我做什么工作?

在我的settings.py的脚下,我有:

try: 
    from local_settings import * 
except ImportError, e: 
    pass 

我把我所有的地方发展local_settings.py中覆盖任何生产设置的设置。我也确保不要上传我的local_settings.py文件!

0

你可以做的是在环境此刻正在使用您的设置PY检查。 为此,您可以在系统上设置一个环境变量,该环境变量在开发环境和生产环境中具有不同的值。

您可以通过

sudo -H gedit /etc/environment 

设置这些环境变量,并添加以下行的文件中:

DEBUG="true" 

(使这种改变提供你将不得不注销并重新登录在进入你的系统)

在生产环境

那么您需要设置调试=“假”。
那么您可以在您的settings.py做到这一点:

DEBUG = os.environ.get('DEBUG', 'true') != 'false' 

,然后你可以设置每个设置,将取决于这样使用环境有所不同:

if DEBUG: 
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' 
else: 
    STATICFILES_STORAGE = STATICFILES_STORAGE = 'custom_storages.StaticStorage' 

(中如果设置在开发环境中,则使用本地django服务器为静态文件提供服务;如果在生产环境中(在custom_storages模块中定义),则使用boto amazon s3 0123推动你的更新,并始终根据环境选择正确的设置。