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

部署在Heroku上的Django项目密码重置时出现Server Error (500)问题求助

解决Heroku上Django密码重置500错误的实战指南

嘿,我明白这种本地正常、线上崩还拿不到详细错误日志的痛苦!咱们一步步来揪出问题根源:

第一步:先拿到详细错误日志(重中之重)

当前的日志只显示500状态,完全没法定位问题,得先搞定这个:

  • 临时开DEBUG调试(用完立刻关!):
    在Heroku上临时设置DEBUG=True,部署后再触发密码重置,就能看到Django的详细错误页面了。调试完记得马上改回DEBUG=False,别留安全隐患。

    heroku config:set DEBUG=True --app billpayy
    # 调试完执行
    heroku config:set DEBUG=False --app billpayy
    
  • 让Django把错误发你邮箱:
    在settings.py里加几行配置,这样服务器出500错时,会把完整错误栈发你邮箱:

    ADMINS = [('你的名字', 'your-email@xxx.com')]
    SERVER_EMAIL = 'your-gmail-address@gmail.com'
    

    前提是你的邮件配置能正常工作(后面会重点讲这个)。

  • 拉取完整Heroku日志:
    跑这个命令看实时日志,说不定能抓到Django的错误输出:

    heroku logs --tail --app billpayy
    

第二步:排查最可能的元凶——邮件配置

密码重置核心是发邮件,本地正常线上崩,大概率是邮件出问题了,尤其是你用的Gmail:

  • 检查Heroku环境变量:
    先确认EMAIL_USER和EMAIL_PASS有没有正确设置:

    heroku config:get EMAIL_USER --app billpayy
    heroku config:get EMAIL_PASS --app billpayy
    

    没设置的话用这个命令加:

    heroku config:set EMAIL_USER=你的gmail邮箱 --app billpayy
    heroku config:set EMAIL_PASS=你的Gmail应用专用密码 --app billpayy
    

    划重点:别用Gmail普通密码! 开了两步验证的话,必须去Google账户里生成「应用专用密码」;没开两步验证的话,得临时开启「不太安全的应用访问」(还是建议开两步验证用应用密码更安全)。

  • 测试邮件发送:
    可以在Heroku上跑个命令直接测试邮件配置:

    heroku run python manage.py shell --app billpayy
    

    然后在shell里执行:

    from django.core.mail import send_mail
    send_mail('测试邮件', '内容', '你的gmail邮箱', ['收件人邮箱'], fail_silently=False)
    

    如果报错,就能直接看到问题了。

第三步:数据库的潜在问题

你的settings.py用的是SQLite,但Heroku的文件系统是临时的——虽然密码重置的token存储不会立刻导致500,但如果数据库没法写入,也可能触发错误。建议换成Heroku推荐的PostgreSQL:

  1. 安装依赖:
    pip install psycopg2-binary
    pip freeze > requirements.txt
    
  2. 修改settings.py的数据库配置:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default=os.environ.get('DATABASE_URL'))
    }
    
  3. 给Heroku加PostgreSQL插件:
    heroku addons:create heroku-postgresql:hobby-dev --app billpayy
    
  4. 迁移数据库:
    heroku run python manage.py migrate --app billpayy
    

第四步:其他小细节排查

  • 检查CSRF令牌:确保你的password_reset.html模板里有{% csrf_token %}标签,没有的话POST请求会被拦截(不过日志会显示CSRF错误,不是500,但还是确认下)。
  • 静态文件收集:线上部署时记得收集静态文件:
    heroku run python manage.py collectstatic --noinput --app billpayy
    

最后总结

先搞定详细错误日志,这是解决问题的钥匙。根据经验,90%的概率是Gmail的SMTP配置出问题——要么环境变量没设对,要么用了普通密码而非应用专用密码。拿到错误日志后,就能精准定位了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:04:07