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

遵循Plotly Dash Basic Auth示例后Heroku应用崩溃,如何解决?

解决Dash Basic Auth示例在Heroku部署崩溃的问题

我帮你梳理一下部署Dash Basic Auth到Heroku时容易踩的几个关键坑,以及对应的解决步骤,按这个来应该就能正常运行了:

1. 确保依赖包完整且正确

Dash的Basic Auth依赖dash-auth库,很多人部署时容易漏掉这个,导致Heroku启动时找不到模块。你的requirements.txt必须包含以下核心依赖(版本可以根据需求调整,但要保证兼容):

dash==2.14.2
dash-auth==2.0.0
gunicorn==21.2.0

如果之前的部署只装了dash,赶紧把dash-auth加上,然后重新推送代码到Heroku。

2. 修正Procfile和WSGI Server配置

Heroku用gunicorn启动应用时,需要指向WSGI兼容的server实例,而不是直接指向Dash的app对象。你需要做两步:

  • 在app.py里,创建Dash实例后,额外定义server变量:
    import dash
    from dash_auth import BasicAuth
    
    app = dash.Dash(__name__)
    server = app.server  # 这行必须加!gunicorn要用到这个server
    
  • 你的Procfile内容要改成:
    web: gunicorn app:server
    
    之前如果写的是web: gunicorn app:app,这就是崩溃的原因之一——gunicorn无法识别Dash的app对象作为WSGI server。

3. 适配Heroku的动态端口和生产环境设置

不要硬编码端口号,也不要在生产环境开debug模式:
修改app.py里的启动代码:

import os

if __name__ == '__main__':
    app.run_server(
        host='0.0.0.0',
        port=int(os.environ.get('PORT', 8050)),  # 从Heroku环境变量取端口,本地 fallback 8050
        debug=False  # 生产环境必须关闭debug,否则会引发安全问题和启动失败
    )

4. 安全处理用户名密码(不要硬编码)

官网的示例可能直接硬编码了用户名密码,但在Heroku上这么做既不安全,也不利于后续修改。正确的做法是用Heroku的环境变量:

  • 登录Heroku控制台,进入你的应用 → Settings → Config Vars,添加两个变量:USERNAME和PASSWORD,设置你想要的账号密码。
  • 在app.py里读取这些环境变量:
    import os
    from dash_auth import BasicAuth
    
    VALID_USERNAME_PASSWORD_PAIRS = {
        os.environ.get('USERNAME'): os.environ.get('PASSWORD')
    }
    
    auth = BasicAuth(app, VALID_USERNAME_PASSWORD_PAIRS)
    

5. 查看日志定位剩余问题

如果按上面的步骤改完还是崩溃,一定要看Heroku的日志找具体错误:
在本地终端运行:

heroku logs --tail

日志里会明确告诉你哪里出问题——比如缺少依赖、语法错误、环境变量没设置等等,顺着日志提示修复就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:35