2017-06-22 77 views
3

大家!我在哪裏爲Django設置環境變量?

的Django 1.11 + 9.6的PostgreSQL + Gunicorn在+ Ubuntu的16.04 AWS

我想設置環境變量的敏感信息。(Django的密鑰,DB密碼...)

我研究過許多文章設置方法。

但當我os.environ [ 'env_name'],

  1. 的.bashrc:不工作

  2. 的.bash_profile:不工作

  3. .profile文件:不工作

  4. /etc/environment:不能正常工作

  5. Gunicorn腳本文件(systemd):我現在就寫在gunicorn systemd腳本。它工作得很好。

但是因爲我也想在其他程序中使用環境變量,我把它們設置在1〜5個配置中。我不明白爲什麼1〜5個配置不起作用。是否有設置環境變量的範圍或優先級?

編輯:

我使用Ubuntu 16.04服務器。我無法重新啓動終端會話。

我試圖 '源的.bashrc' 和註銷/登錄。但它沒有奏效。

五言中, '回聲$ some_env_var' 工作,我說,Django的無法讀取。

+0

設置在.bashrc中的環境變量應該工作。在設置環境變量並重新啓動終端會話之後,請確保您的源.bashrc。 – shubham003

+1

您需要確保您爲實際運行服務器的用戶設置它們。 –

+0

我使用Ubuntu 16.04服務。我無法重新啓動終端會話。 – user3586239

回答

2

在服務器中創建一個名爲.bashrc文件

export('the_name_in_bashrc', some_value) 

然後在settings.py

import os 
some_variable = os.environ.get('the_name_in_bashrc') 
1

的.bashrc將地方發展而不是爲生產環境中工作。我只花了相當多的時間去尋找這個問題的答案,在這裏是爲我工作:

1)在你的服務器名爲的Settings.ini創建一個文件的某處。我這樣做的/etc/project/settings.ini

2)使用以下格式,其中的關鍵可能是一個環境變量和值是一個字符串的配置數據添加到該文件。請注意,您不需要用引號括住該值。

[section] 
secret_key_a=somestringa 
secret_key_b=somestringb 

3)使用python的configparser庫訪問這些變量。下面的代碼可以在你的django項目的設置文件中。

from configparser import RawConfigParser 

config = RawConfigParser() 
config.read('/etc/project/settings.ini') 

DJANGO_SECRET = config.get('section', 'secret_key_a') 

來源:https://code.djangoproject.com/wiki/SplitSettings(INI風格的部分)