Установка переменных среды Ubuntu для Django

У меня есть проект Django, работающий на Ubuntu 16.04 с Nginx и Gunicorn. Я пытаюсь установить переменную среды, чтобы загрузить другой файл настроек для производства. Я пробовал следующее, чтобы не преобладать.

В 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 не может ее увидеть. Что-то выглядит явно неправильно с тем, что я пытаюсь?


person Tyler Bell    schedule 02.09.2017    source источник
comment
Вы запускали Django перед настройкой среды? Настройки оцениваются только во время запуска.   -  person wmorrell    schedule 02.09.2017
comment
Я убедился, что он перезапускается после установки переменной.   -  person Tyler Bell    schedule 02.09.2017
comment
И вы проверяете, что ваш оператор импорта выполняется и исключения не выдаются?   -  person wmorrell    schedule 02.09.2017
comment
Да, я беспокоился о том же и подтвердил, что исключений нет.   -  person Tyler Bell    schedule 02.09.2017
comment
Хорошо, и это весь ваш файл настроек? Какова схема вашего проекта?   -  person wmorrell    schedule 02.09.2017
comment
Наконец-то я заработал. я опубликую ответ   -  person Tyler Bell    schedule 02.09.2017


Ответы (2)


Хорошо, я надеюсь, что это поможет кому-то в будущем, кто столкнется с той же проблемой. В итоге я отредактировал файл 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
person Tyler Bell    schedule 02.09.2017

Посмотрите собственный файл настроек django.

Настройки Django

Эта часть может быть полезна

добавьте пользовательскую переменную env в файл настроек:

MY_CUSTOM_SETTINGS = 'hello'

то вы можете получить к нему доступ, используя:

from django.conf import settings
In [5]: print(settings.MY_CUSTOM_SETTINGS)
hello
person Sumit Gupta    schedule 02.09.2017
comment
Спасибо за ссылку. Раньше я изучал это, однако это не то, чего я пытаюсь достичь. - person Tyler Bell; 02.09.2017
comment
Ответы только по ссылкам плохие. По крайней мере, скопируйте в раздел, который, по вашему мнению, связан с рассматриваемой проблемой. - person wmorrell; 02.09.2017
comment
мой плохой, добавил соответствующую часть из ссылки. Спасибо за предложение. - person Sumit Gupta; 02.09.2017