Python Heroku部署因缺少SQL表而失败

Python Heroku部署因缺少SQL表而失败,python,pandas,sqlite,heroku,sqlalchemy,Python,Pandas,Sqlite,Heroku,Sqlalchemy,我在Heroku上部署了我的应用程序,我在那里遇到了一条错误消息,但在我的本地机器上没有。(虽然环境不同,但它们运行的代码完全相同。一个重要的区别是,在本地,我在执行时在同一台机器上构建。Heroku没有。) 我插入了一些打印语句,试图隔离问题。在运行heroku local的本地计算机上,这些消息显示为: 6:06:38 PM web.1 | DisasterResponse.db successfully opened. 6:06:38 PM web.1 | Schema Names:

我在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']
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: []
这很好。这是我在发布脚本中创建的“MessageCategorization”表。不幸的是,当我在Heroku dyno上运行代码时,该表丢失了。同样的句子如下:

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']
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”表

如果你好奇,你可以在


我欢迎您就如何进一步诊断此问题提供建议。

我注意到的问题是,您的release命令在每次成功构建后都会执行

但是。。。Release命令是构建后的命令,而不是构建的一部分,这意味着一旦构建完成,此时文件的快照就是使其进入正在运行的dynos的快照

您可以通过运行
heroku run bash
,然后运行bash命令,如
cd
ls
,来检查dyno文件结构

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


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

那么您说该过程不是构建->发布->运行?这意味着在发布期间生成的文件在运行时不可用。这可以做到。这正是问题所在,让DB生成成为构建的一部分,以实现您正在尝试的目标。Heroku同意您的观点。“发布阶段不适用于需要文件系统持久性的任务,因为发布阶段的文件系统更改不会部署到应用程序的dyno结构中(dyno文件系统是短暂的)。资产编译应该在构建期间进行。发布阶段可用于将编译后的资产上载到CDN。”是的,这是不对的,这是一个很酷的项目,你部署了吗?我过去允许我在构建阶段运行脚本。这样做非常有效,解决了问题!非常感谢你帮我诊断这个。