Приложение Django работает локально, но показывает «Unhandled Exception» на PythonAnywhere (журналы доступны)
Ссылка на видео на youtube: https://youtu.be/iJrUiem10iI
Я разработал Django-приложение, которое включает в себя такие функции, как загрузка видео с YouTube (с помощью yt-dlp) и потенциальное преобразование форматов файлов.
Проблема:
Приложение прекрасно работает на моей локальной машине с помощью python manage.py runserver. Я могу получить доступ к представлениям, например, по адресу http://127.0.0.1:8000/converter/, и функциональность работает так, как ожидалось.
Однако после развертывания приложения на PythonAnywhere (используя бесплатный уровень) я столкнулся с ошибкой. Когда я пытаюсь получить доступ к своему сайту по адресу https://kristjan.pythonanywhere.com/ или конкретному URL-адресу приложения https://kristjan.pythonanywhere.com/converter/, я получаю общую страницу ошибки PythonAnywhere, в которой говорится:
Что-то пошло не так :-(
)При попытке загрузить этот сайт что-то пошло не так; пожалуйста, повторите попытку позже.
Код ошибки: Unhandled Exception
Самостоятельное примечание: На странице ошибки даются ссылки на журналы, которые должны содержать конкретную обратную связь.
Что я сделал и проверил:
Локальный сервер: Убедились, что приложение корректно работает локально через runserver. URL http://127.0.0.1:8000/converter/ загружает правильный шаблон index.html.
Виртуальное окружение: Создал виртуальную среду на PythonAnywhere по адресу /home/Kristjan/.virtualenvs/djangoappvirtualenv. Я активировал эту виртуальную среду и установил все необходимые пакеты (Django, yt-dlp и т.д., максимально соответствующие моему локальному окружению) с помощью pip install -r requirements.txt (или по отдельности) в консоли PythonAnywhere.
Настройка базы данных:
Настроил параметр DATABASES по умолчанию в settings.py на использование стандартного файла db.sqlite3, расположенного в каталоге моего проекта (/home/Kristjan/djangoapp/db.sqlite3).
Успешно запустили python manage.py migrate в консоли PythonAnywhere (при активной virtualenv), чтобы инициализировать схему базы данных.
PythonAnywhere Web Tab Configuration: Исходный код: Установите значение /home/Kristjan/djangoapp (где находятся мои директории manage.py и project/app).
Рабочий каталог: Установлено значение /home/Kristjan/. (Может ли это несоответствие с каталогом исходного кода быть проблемой?)
Файл конфигурацииWSGI: Путь - /var/www/kristjan_pythonanywhere_com_wsgi.py. Содержимое проверено (см. ниже).
Virtualenv: Корректно связано с /home/Kristjan/.virtualenvs/djangoappvirtualenv.
Статические файлы: Сопоставления для /static/ и /media/ настроены так, чтобы указывать на мою структуру каталогов /home/Kristjan/djangoapp/.
WSGI-файл (/var/www/kristjan_pythonanywhere_com_wsgi.py):
import os
import sys
# add project directory to the sys.path
project_home = '/home/Kristjan/djangoapp' # Path to directory containing manage.py
if project_home not in sys.path:
sys.path.insert(0, project_home)
# ensure the project's parent directory is also findable for imports if needed
# sys.path.insert(1, os.path.dirname(project_home)) # Sometimes needed depending on structure
# set environment variable for settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangoapp.settings' # Project is named 'djangoapp'
# serve django via WSGI
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Use code with caution.
Python
settings.py (/home/Kristjan/djangoapp/djangoapp/settings.py):
ALLOWED_HOSTS = ['kristjan.pythonanywhere.com']
DEBUG = True (Temporarily, hoping for better errors, but still get the generic page).
INSTALLED_APPS включает мое приложение „converter“.
Базы данных настроены на sqlite3, как упоминалось выше.
Конфигурация URL: Подтверждено, что основной urls.py включает в себя converter.urls по пути /converter/, а converter/urls.py определяет пути, которые показаны работающими локально. (При необходимости можно получить подробную информацию о структуре).
Структура файлов: Проверил, что структура проекта на PythonAnywhere соответствует моей локальной установке и стандартной схеме Django.
Перезагрузка веб-приложения: Несколько раз нажимали кнопку «Перезагрузить» на вкладке PythonAnywhere Web после проверки и изменения конфигурации.
Окружение:
PythonAnywhere Python: 3.10 (с веб-вкладки)
Локальная версия Django: [например, 5.1.1 - укажите свою версию]
PythonAnywhere Django Version: [Укажите версию, установленную в venv - для обеспечения совместимости]
Вопрос:
Что такое проблема, как решить проблему?
URL веб-приложения: Kristijan.pythonanywhere.com
ссылка на журналы: https://drive.google.com/drive/folders/1wg7PKjfU_jiw3U2t_hbK7E75k-OnoqiH?usp=sharing
Ошибки довольно очевидны:
2025-03-29 15:40:15,378: Ошибка при запуске приложения WSGI
2025-03-29 15:40:15,384: Ошибка ModuleNotFoundError: нет модуля с именем "YouTube Video Downloader.настройки"
Взгляните на файл kristjan_pythonanywhere_com_wsgi.py
и переименуйте YouTubeVideoDownloader.settings
в djangoapp.settings
Это последняя ошибка в вашем журнале ошибок:
ModuleNotFoundError: No module named 'django'
Вы упомянули, что установили Django в свой virtualenv, но ошибка указывает на обратное. Я бы перепроверил, установлен ли он в правильном virtualenv.
Убедитесь, что вы нажали кнопку "Перезагрузить" на странице "Веб" после внесения изменений.