2017-09-02 142 views
0

我有一个运行在Ubuntu 16.04上的Nginx和Gunicorn的Django项目。 我正在尝试设置一个环境变量以便为生产加载不同的设置文件。我已经尝试过以下几点,以不占上风。Ubuntu为Django设置环境变量

在etc/environment中我添加了我的变量。该文件看起来像这样,

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 

PRODUCTION="Production_Variable" 

该变量的值是不相关的。

当我运行printenv时,我可以看到这个变量实际上是存在的! 但是我的django项目仍然没有“看到”它。

try: 
    if 'PRODUCTION' in os.environ: 

     from .prod import * 

except: 
    pass 

我有点困惑,printenv显示环境变量存在,但Django无法看到它。有什么东西看起来公然错误,我正在尝试?

+0

你设置环境之前推出的Django?设置仅在启动时评估。 – wmorrell

+0

我确保在设置变量后重新启动它。 –

+0

而且您正在验证您的导入语句是否已运行,并且不会抛出异常? – wmorrell

回答

0

看看django自己的设置文件。

Django Settings

这部分可能会有所帮助

在设置文件中添加自定义的环境变量:

MY_CUSTOM_SETTINGS = 'hello' 

那么你可以使用访问:

from django.conf import settings 
In [5]: print(settings.MY_CUSTOM_SETTINGS) 
hello 
+0

感谢您的链接。我以前曾经研究过这个,但是,这不是我想要达到的。 –

+1

仅链接答案是不好的。至少要复制您认为与手头问题相关的部分。 – wmorrell

+0

我的不好,加了链接的相关部分。感谢您的建议。 –

0

好吧,我希望这能帮助未来的谁正在跑步陷入同样的​​问题。我结束了编辑我gunicorn.service文件,并添加以下行..

Environment="Production=production" 

所以我的文件看起来像这样

[Unit] 
Description=gunicorn daemon 
After= network.target 

[Service] 
User=root 
Group=www-data 
Environment="Production=production" 
WorkingDirectory= # stuff 

[Install] 
WantedBy=multi-user.target