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

部署在railway.app的Django应用上传图片触发Server Error (500)

Django部署在Railway.app上传图片触发500错误排查

我已将Django应用部署在railway.app平台,开发环境中可正常上传图片,但在部署后的线上应用点击上传时触发Server Error (500)。以下是相关代码:

settings.py代码

STATIC_URL = 'static/'
# STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] 
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

if 'XXX' in os.environ:

    # Bucket config
    AWS_STORAGE_BUCKET_NAME = 'xxx'
    AWS_S3_REGION_NAME = 'xxx'
    AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'

    # Static and media files
    STATICFILES_STORAGE = 'custom_storages.StaticStorage'
    STATICFILES_LOCATION = 'static'
    DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'
    MEDIAFILES_LOCATION = 'media'

    # Override static and media URLs in production
    STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATICFILES_LOCATION}/'
    MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{MEDIAFILES_LOCATION}/'

HTML代码

<div>
      <img src="{{user_profile.profile_img.url}}" alt="Profile Image">   
</div>
 
<a href="{% url 'profile-image' user_profile.user user_profile.profile_uuid %}"></a>

排查方向与解决办法

  • 环境变量校验:
    确认Railway后台已正确配置XXX、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量,检查拼写是否正确、值是否为空;同时核对AWS_S3_REGION_NAME与S3桶实际区域是否一致。
  • S3桶权限配置:
    给对应的IAM用户配置s3:PutObject、s3:GetObject等必要权限;检查S3桶的CORS配置是否允许Railway应用域名访问。
  • 自定义存储类检查:
    确认custom_storages.py已部署到线上,其中的存储类需正确继承S3Boto3Storage并设置location属性,示例代码:
    from storages.backends.s3boto3 import S3Boto3Storage
    
    class StaticStorage(S3Boto3Storage):
        location = 'static'
    
    class MediaStorage(S3Boto3Storage):
        location = 'media'
    
    确保线上环境已安装django-storages和boto3依赖,requirements.txt需包含这两个包。
  • 查看错误日志:
    在Railway应用控制台查看详细的500错误栈信息,直接定位具体错误原因(如权限不足、依赖缺失、存储类导入失败等)。
  • 模板与路由检查:
    确认上传表单的enctype属性设置为multipart/form-data;检查profile-image路由配置及对应视图函数的上传逻辑,避免依赖本地文件系统路径的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:55:24