You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django部署Railway后媒体文件404错误求助

解决Railway部署Django后媒体图片404问题

一、问题根源

  • urls.py中仅在DEBUG=True时添加媒体文件路由,但Railway运行环境即使开启DEBUG,也并非Django开发服务器(runserver),无法自动处理媒体文件的静态服务。
  • Railway采用临时文件系统,上传的媒体文件会在应用重启后丢失,这是长期运行的隐患。

二、临时测试修复

若仅需临时让媒体文件可访问,修改urls.py,移除if settings.DEBUG判断,确保媒体路由始终生效:

from django.contrib import admin
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static
admin.site.site_header = 'Admin Panel'

urlpatterns = [
    path('admin/', admin.site.urls),
    path('cart/',include('cart.urls',namespace="cart")),
    path('orders/',include('orders.urls',namespace='orders')),
    path('payment/',include('payment.urls',namespace='payment')),
    path('',include('shop.urls',namespace="shop")),
    
]

# 移除DEBUG判断,始终添加媒体文件路由
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

⚠️ 注意:此方法仅适用于测试,临时文件系统会导致重启后文件丢失,正式环境必须使用云存储。

三、正式解决方案(云存储示例:Cloudinary)

步骤1:安装依赖

pip install cloudinary django-cloudinary-storage

步骤2:修改settings.py

  1. 将Cloudinary相关应用加入INSTALLED_APPS:
INSTALLED_APPS = [
    'shop',
    'cart',
    'orders',
    'payment',
    'phone_field',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'whitenoise.runserver_nostatic',
    'django.contrib.staticfiles',
    # 添加以下两项
    'cloudinary',
    'cloudinary_storage',
]
  1. 配置Cloudinary存储后端,替换默认媒体存储:
import os

CLOUDINARY_STORAGE = {
    'CLOUD_NAME': os.environ.get('CLOUDINARY_CLOUD_NAME'),
    'API_KEY': os.environ.get('CLOUDINARY_API_KEY'),
    'API_SECRET': os.environ.get('CLOUDINARY_API_SECRET'),
}

# 设置媒体文件存储为Cloudinary
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
  1. 保留MEDIA_URL,注释掉本地MEDIA_ROOT配置:
MEDIA_URL = '/media/'
# MEDIA_ROOT = BASE_DIR / 'media'  # 注释此行

步骤3:在Railway配置环境变量

进入Railway项目的「Variables」页面,添加以下三个环境变量:

  • CLOUDINARY_CLOUD_NAME:你的Cloudinary账号云名称
  • CLOUDINARY_API_KEY:你的Cloudinary API密钥
  • CLOUDINARY_API_SECRET:你的Cloudinary API密钥密码

步骤4:更新部署

修改配置后,重新部署Railway应用,确保依赖和配置生效。

四、额外注意事项

  • 正式部署时关闭DEBUG模式,并将Railway域名加入ALLOWED_HOSTS:
DEBUG = False
ALLOWED_HOSTS = ['web-production-08528.up.railway.app', '127.0.0.1']

内容的提问来源于stack exchange,提问作者shafquet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:35:19