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)
Вернуться на верх