Heroku部署Streamlit应用时config.toml配置未生效问题
问题根因
部署后自定义主题失效是因为setup.sh的写入逻辑覆盖了完整配置:脚本执行时向~/.streamlit/config.toml写入的内容仅包含[server]服务启动段,完全没有带上你写好的[theme]主题配置。
本地执行streamlit run时,程序会优先读取项目目录下.streamlit/config.toml的全量配置,所以主题可以正常生效;Heroku环境下程序加载的是setup.sh生成的、只有服务参数的配置文件,找不到主题配置就会回退到默认的白底黑字样式。
修复方法
修改setup.sh脚本,把主题配置合并到生成的~/.streamlit/config.toml内容中,修改后的完整脚本如下:
mkdir -p ~/.streamlit/ echo "\ [general]\n\ email = \"myname@domain.com\"\n\ " > ~/.streamlit/credentials.toml echo "\ [server]\n\ headless = true\n\ enableCORS=false\n\ port = $PORT\n\ [theme]\n\ primaryColor = '#eb4034'\n\ backgroundColor = '#021d24'\n\ secondaryBackgroundColor = '#B9F1C0'\n\ textColor = '#FFFFFF'\n\ font = \"sans serif\"\n\ " > ~/.streamlit/config.toml
注意事项
- 修改完成后重新提交代码推送到Heroku触发重新部署即可
- 部署完成后访问站点建议先做硬刷新(Ctrl+F5 / Cmd+Shift+R),避免浏览器缓存旧的默认样式导致误判
- 不建议在Heroku部署时依赖项目目录下的config.toml加载主题,不同构建环境下路径识别容易出问题,直接把全量配置通过setup.sh写入到用户目录的.streamlit路径下是兼容性最高的方案
内容的提问来源于stack exchange,提问作者Suparno Saha
相关产品推荐
相关产品推荐

