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
Он все еще показывает значение по умолчанию, а не 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 и инициализировать его.