Проблема поиска .env с помощью WSGI с использованием стека Django с dotenv

У меня есть приложение Django, и я пытаюсь защитить свой SECRET_KEY с помощью dotenv. Сервер запуска manage.py работает нормально, но сайт, размещенный на apache2, не работает, и apache дает мне журнал ошибок:

mod_wsgi (pid=32200): Failed to exec Python script file '/opt/bitnami/projects/accuhx/accuhx/wsgi.py'.
mod_wsgi (pid=32200): Exception occurred processing WSGI script '/opt/bitnami/projects/accuhx/accuhx/wsgi.py'.
Traceback (most recent call last):
File "/opt/bitnami/projects/accuhx/accuhx/wsgi.py", line 23, in <module>
 application = get_wsgi_application()
File "/opt/bitnami/python/lib/python3.8/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
django.setup(set_prefix=False)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/__init__.py", line 19, in setup
   configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py", line 83, in __getattr__
    self._setup(name)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py", line 70, in _setup
self._wrapped = Settings(settings_module)
File "/opt/bitnami/python/lib/python3.8/site-packages/django/conf/__init__.py", line 196, in __init__
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Я предполагаю, что это потому, что мой manage.py может найти .env, а wsgi.py не может, но я понятия не имею, почему.

Моя структура:

accuhx
|
|-manage.py
|-accuhx
|    |
|    |-settings.py
     |-.env
     |-wsgi.py

WSGI.py:

import os
import dotenv
from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())

from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'accuhx.settings')
application = get_wsgi_application()

manage.py

def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'accuhx.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

.env

DJANGO_SECRET_KEY=p$********xr

settings.py

import os

SECRET_KEY = os.getenv("DJANGO_SECRET_KEY")

Я следовал руководству на https://help.pythonanywhere.com/pages/environment-variables-for-web-apps/ и https://github.com/theskumar/python-dotenv

Моя проблема не указывает на правильный путь для .env для wsgi? Почему это работает для runserver manage.py, но не для маршрута apache?

Любое направление будет высоко оценено.


person Austin    schedule 07.09.2020    source источник
comment
Удалось ли вам найти решение для этого? Я столкнулся с этой же проблемой.   -  person Utsav Shrestha    schedule 09.11.2020


Ответы (1)


Я столкнулся с той же проблемой и решил ее, добавив в settings.py и wsgi.py

import os
from dotenv import load_dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path)

sdarwin предложил жестко указать путь к .env

https://github.com/theskumar/python-dotenv/issues/210

person statsPhil    schedule 01.12.2020