Django Media Files Not Found (404) при развертывании рендера
У меня проблемы с обслуживанием медиафайлов в моем Django-приложении, развернутом на Render. Медиафайлы создаются и хранятся (я думаю?) на сервере правильно, но обращение к ним через браузер приводит к ошибке 404. В моей локальной среде разработки все работает нормально.
Настройка проекта:
settings.py
:
# Initialize environment variables
env = environ.Env(
DEBUG=(bool, False)
)
# Read .env file
environ.Env.read_env(os.path.join(Path(__file__).resolve().parent.parent, '.env'))
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Static and Media files
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = '/var/data/media'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
# Static files finders
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
# Ensure static files are served using Whitenoise
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware',
]
# Whitenoise storage
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
# Other settings...
# URL configuration
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Существование файла:
Я убедился, что медиафайлы создаются на сервере:
render@srv-cpoif12ju9rs738p174g-5f676c9f8c-bwxhd:~/project/src$ ls -l /var/data/media/subtitles/U-sEgjJRHcM_subtitles.json
-rwxr-xr-x 1 render render 14995 Jun 22 14:53 /var/data/media/subtitles/U-sEgjJRHcM_subtitles.json
URL Patterns:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Выпуск:
Несмотря на то, что файл существует на сервере, обращение к нему по URL приводит к ошибке 404.
Например: https://xxx.onrender.com/media/subtitles/U-sEgjJRHcM_subtitles.json
Что я пробовал:
- Убедились в существовании файла на сервере.
- Проверил и перепроверил настройки
MEDIA_URL
иMEDIA_ROOT
. - Убедились, что URL-адреса настроены правильно.
- Разрешения кажутся правильными с
chmod -R 755 /var/data/media
.
Дополнительная информация:
- Используем Render для развертывания.
- Создан постоянный диск, смонтированный по адресу
/var/data
.
Любая помощь в решении этой проблемы будет очень признательна!
Недавно у меня возникла такая же проблема, и чтобы ее решить, я добавил эти коды в корневой файл urls.py моего проекта:
from django.urls import path, include, re_path
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)