2017-09-02 228 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