首页 > 解决方案 > Heroku 部署因缺少 SQL 表而失败

问题描述

我在 Heroku 上部署了我的应用程序,但我正在努力解决我到达那里的错误消息,但不是在我的本地机器上。(尽管环境不同,但它们都运行完全相同的代码。一个重要的区别是我在本地构建在我执行的同一台机器上。Heroku 没有。)

我插入了一些试图隔离问题的打印语句。在我的本地机器上运行heroku local这些消息出来:

6:06:38 PM web.1 |  DisasterResponse.db successfully opened.
6:06:38 PM web.1 |  Schema Names: ['main']
6:06:38 PM web.1 |  Table Names: ['MessageCategorization']

这很棒。我在发布脚本中创建了表格“MessageCategorization”。不幸的是,当我在 Heroku dyno 上运行代码时,该表丢失了。相同的行出来:

Oct 01 19:51:38‌disaster-message-triage‌‌app/web.1‌ DisasterResponse.db successfully opened.
Oct 01 19:51:38 ‌disaster-message-triage‌ ‌app/web.1‌ Schema Names: ['main']
Oct 01 19:51:38 ‌disaster-message-triage‌ ‌app/web.1‌ Table Names: []

在这里,您可以看到模式“main”存在,但我没有“MessageCategorization”表。

如果您好奇,可以在https://github.com/manifolded/FigureEightDisasterResponse查看我的仓库

我欢迎有关如何进一步诊断此问题的建议。

标签: pythonpandassqliteherokusqlalchemy

解决方案


我注意到的问题是每次成功构建后都会执行您的发布命令。

但是... 发布命令是构建后的命令,而不是构建的一部分,这意味着一旦您的构建完成,当时的文件快照就是运行测功机的文件。

您可以通过运行检查 dyno 文件结构heroku run bash,然后运行 ​​bash 命令,如cdls等。

注意:您以这种方式所做的任何更改都是临时的,并且仅在此一次性会话期间持续

您可以使用bash buildpack(不确定它是否存在)将发布脚本作为构建的一部分,或者使用 heroku 提供的持久 postgres 数据库。看这里


推荐阅读