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

Heroku部署Django应用静态文件加载失败(404 Not Found)

解决Django部署Heroku后静态文件404的问题

我之前部署Django到Heroku时也踩过一模一样的静态文件坑!咱们一步步排查解决:

1. 必须配置Whitenoise托管静态文件

生产环境下Django默认不会处理静态文件的HTTP请求,Heroku上必须用Whitenoise来接管这项工作,这是最容易遗漏的关键点:

  • 先安装Whitenoise:
    pip install whitenoise
    
    记得把它加到requirements.txt里,不然Heroku部署时会找不到这个依赖包。
  • 在settings.py的MIDDLEWARE列表里添加Whitenoise中间件,注意顺序要放在SecurityMiddleware之后,CommonMiddleware之前:
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware',  # 这行必须加
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # ... 其他中间件保持不变
    ]
    
  • 最后在settings.py末尾加上静态文件存储配置:
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    

2. 确认collectstatic执行无异常

虽然你说已经执行了collectstatic,但还是要确认在Heroku上没有报错:

  • 运行Heroku命令重新执行文件收集:
    heroku run python manage.py collectstatic --noinput
    
    查看输出有没有权限错误、文件找不到之类的提示,确保所有静态文件都被正确收集到STATIC_ROOT指定的~/static目录下。

3. 检查DEBUG模式是否关闭

生产环境下必须把DEBUG设为False,否则Django会用开发模式处理静态文件,但Heroku的生产环境不支持这种方式:

  • 查看当前Heroku的DEBUG配置:
    heroku config:get DEBUG
    
  • 如果输出是True,立刻改成False:
    heroku config:set DEBUG=False
    

4. 补充静态文件路由(可选但更保险)

在项目根目录的urls.py里添加静态文件的路由配置,确保生产环境下请求能被正确映射:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... 你的所有业务路由
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

5. 检查STATICFILES_DIRS配置(如果有自定义静态文件)

如果你的Django app里有自己的static文件夹(比如your_app/static),需要把它加到STATICFILES_DIRS里,这样collectstatic才能把这些文件收集到STATIC_ROOT:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'your_app/static'),
]

做完这些步骤后,重新部署Heroku应用,再用你的curl命令测试,应该就能正常加载静态文件了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:26