Django (Gunicorn) не видит ENV VARS в производстве, а Django-shell видит

Я в полном отчаянии. Я не могу понять, почему Django не видит переменные окружения, даже если shell может.

в settings.py

BASE_URL = os.getenv('VUE_APP_WEB_URL','http://127.0.0.1:8080/')

в admin.py

class _UserAdmin...
    ...
    list_display = ('username', 'email', 'is_staff', '_set_pwd_url','base_url')
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups')

    def base_url(self, obj: User):
        return settings.BASE_URL

в /etc/environment

VUE_APP_WEB_URL=http://my.url.xyz/

Сервер перезагружался несколько раз, также Gunicorn был перезапущен sudo service gunicorn restart

enter image description here

Он все еще показывает значение по умолчанию, а не ENV VAR.

Теперь, когда я тестирую его в django shell:

Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> settings.BASE_URL
'http://my.url.xyz/'
>>> 

Что происходит?

PS: Кэш браузера не является проблемой.

Создайте файл .env в вашем (желательно корневом) каталоге и затем настройте вашу конфигурацию gunicorn.service, чтобы она указывала на этот файл.

создать файл .env

VUE_APP_WEB_URL= 'http://my.url.xyz/'
ANOTHER_VARIABLE = 'something'

затем добавьте EnvironmentFile к вашей конфигурации

...

[Service]  
...
EnvironmentFile=/path/to/your/.env
ExecStart=
...            

Вы также можете использовать pip install django-dotenv, который также будет искать .env и инициализировать его.

Вернуться на верх