Django на PythonAnywhere: Неправильная конфигурация: Параметр SECRET_KEY не должен быть пустым
Я размещаю проект Django на PythonAnywhere и сталкиваюсь со следующей ошибкой при запуске makemigrations: django.core.exceptions.ImproperlyConfigured: Параметр SECRET_KEY не должен быть пустым.
Моя установка:
Платформа хостинга: PythonAnywhere
Управление окружением: Использование файла .env для управления секретами
.
Версия Python: 3.10
Версия Django: 5.1.2
В моем WSGI-файле я включил следующий код для загрузки .env-файла:
import sys
from dotenv import load_dotenv
path = '/home/verbsmerch/verbs_backend'
project_folder = os.path.expanduser(path)
load_dotenv(os.path.join(project_folder, '.env'))
В своих настройках я загружаю SECRET_KEY следующим образом:
SECRET_KEY = os.getenv("SECRET_KEY")
Что я пробовал:
- Убедитесь, что файл .env существует и находится в правильном каталоге.
- Проверили, что файл .env имеет правильные права доступа (chmod 600).
- Запустил оболочку Python для отладки:
from dotenv import load_dotenv
import os
load_dotenv('/home/verbsmerch/verbs_backend/.env')
print(os.getenv("SECRET_KEY")) # This prints the correct key
- Перезагрузите веб-приложение с вкладки PythonAnywhere Web.
Почему Django не может загрузить SECRET_KEY, хотя в оболочке Python он вроде бы работает? Как я могу решить эту ошибку?
Не знаю, откуда взялась ваша конкретная ошибка, но я размещал веб-приложения на Pythonanywhere и использовал python-decouple для управления файлами .env. Пожалуйста, посмотрите Как использовать Python Decouple для установки и настройки переменных окружения.
Модуль Django settings
содержит всю конфигурацию вашей установки Django. Как следствие, он загружается первым, и все «настройки» применяются до запуска WSGI-сервера.
В вашем случае SECRET_KEY = os.getenv("SECRET_KEY")
запускается первым перед load_dotenv(os.path.join(project_folder, '.env'))
, потому что первый содержится в модуле settings
, а второй - в модуле wsgi
.
Вам придется пересмотреть установленное расположение load_dotenv(os.path.join(project_folder, '.env'))
, чтобы в итоге все получилось. Я бы предложил загружать переменные окружения из модуля settings
, а затем использовать их сразу же в модуле settings
и в любом другом месте после него.