Почему мое приложение Django не может прочитать набор переменных среды?

#python #django #linux #gunicorn

#python #django #linux #gunicorn

Вопрос:

Проблема

Мое приложение django не может прочитать переменные среды, которые я установил. Я уверен, что это что-то глупо простое, чего мне не хватает.

Переменные среды существуют так, как я ожидаю. Когда я захожу в оболочку python, я могу получить к ним доступ. С помощью os.environ["DB_PASSWORD_DJANGO"] команды.

Код

Переменные существуют так, как я их ожидаю

~/.profile

 # Set Environment Vars
export DB_NAME_DJANGO="<name>"
export DB_USER_DJANGO="<user>"
export DB_PASSWORD_DJANGO="<pw>"
export CLOUD_SQL_INSTANCE_IP="<IP>"
 
 user@localhost:~$ env
ANG=en_US.UTF-8
...
CLOUD_SQL_INSTANCE_IP=<ip>
DB_PASSWORD_DJANGO=<pw>
DB_USER_DJANGO=<user>
...
DB_NAME_DJANGO=<db>
 

Settings.py

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ['DB_NAME_DJANGO'],
        'USER': os.environ['DB_USER_DJANGO'],
        'PASSWORD': os.environ['DB_PASSWORD_DJANGO'],
        'HOST': os.environ['CLOUD_SQL_INSTANCE_IP'],
        'PORT': 5432,
    }
}
 

Ошибка

 Dec  3 02:16:52 localhost gunicorn[36212]:   File "/usr/lib/python3.6/os.py", line 669, in __getitem__
Dec  3 02:16:52 localhost gunicorn[36212]:     raise KeyError(key) from None
Dec  3 02:16:52 localhost gunicorn[36212]: KeyError: 'DB_NAME_DJANGO'
Dec  3 02:16:52 localhost gunicorn[36212]: [2020-12-03 02:16:52  0000] [36218] [INFO] Worker exiting (pid: 36218)
Dec  3 02:16:52 localhost gunicorn[36212]: Traceback (most recent call last):
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 209, in run
Dec  3 02:16:52 localhost gunicorn[36212]:     self.sleep()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 357, in sleep
Dec  3 02:16:52 localhost gunicorn[36212]:     ready = select.select([self.PIPE[0]], [], [], 1.0)
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
Dec  3 02:16:52 localhost gunicorn[36212]:     self.reap_workers()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
Dec  3 02:16:52 localhost gunicorn[36212]:     raise HaltServer(reason, self.WORKER_BOOT_ERROR)
Dec  3 02:16:52 localhost gunicorn[36212]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
Dec  3 02:16:52 localhost gunicorn[36212]: During handling of the above exception, another exception occurred:
Dec  3 02:16:52 localhost gunicorn[36212]: Traceback (most recent call last):
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/homeuser/django_app/venv/bin/gunicorn", line 8, in <module>
Dec  3 02:16:52 localhost gunicorn[36212]:     sys.exit(run())
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 58, in run
Dec  3 02:16:52 localhost gunicorn[36212]:     WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/app/base.py", line 228, in run
Dec  3 02:16:52 localhost gunicorn[36212]:     super().run()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run
Dec  3 02:16:52 localhost gunicorn[36212]:     Arbiter(self).run()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 229, in run
Dec  3 02:16:52 localhost gunicorn[36212]:     self.halt(reason=inst.reason, exit_status=inst.exit_status)
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 342, in halt
Dec  3 02:16:52 localhost gunicorn[36212]:     self.stop()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop
Dec  3 02:16:52 localhost gunicorn[36212]:     time.sleep(0.1)
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
Dec  3 02:16:52 localhost gunicorn[36212]:     self.reap_workers()
Dec  3 02:16:52 localhost gunicorn[36212]:   File "/home/user/django_app/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
Dec  3 02:16:52 localhost gunicorn[36212]:     raise HaltServer(reason, self.WORKER_BOOT_ERROR)
Dec  3 02:16:52 localhost gunicorn[36212]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
Dec  3 02:16:52 localhost systemd[1]: gunicorn.service: Main process exited, code=exited, status=1/FAILURE
Dec  3 02:16:52 localhost systemd[1]: gunicorn.service: Failed with result 'exit-code'.
 

Настройка

 python 3.6.9
ubuntu 18.04 LTS
 

Редактировать 1

Я попытался добавить переменные среды в .bashrc, но безуспешно.

Комментарии:

1. Вы запускаете сервер разработки Django с того же терминала, в который вы экспортировали ENVS?

2. @ArakkalAbu Да, я почти уверен, что он запускается с того же терминала.