【问题标题】:Heroku deployment fails on missing SQL tableHeroku 部署因缺少 SQL 表而失败
【发布时间】:2021-01-17 20:08:13
【问题描述】:

我在 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 的回购协议

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

【问题讨论】:

    标签: python pandas sqlite heroku sqlalchemy


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 所以你说的过程不是构建-> 发布-> 运行?这意味着在发布期间生成的文件在运行时将不可用。可以的。
    • 这正是问题所在,将数据库生成作为构建的一部分来实现您的目标
    • Heroku 同意你的看法。 “发布阶段不适合需要文件系统持久性的任务,因为发布阶段的文件系统更改不会部署到应用程序的 dyno 结构(dyno 文件系统是短暂的)。资产编译应该在构建期间进行。发布阶段可用于上传编译后的资产到 CDN。” devcenter.heroku.com/articles/release-phase
    • 是的,那是不对的,这是一个很酷的项目,你部署了吗?
    • 我使用elements.heroku.com/buildpacks/weibeld/heroku-buildpack-run 允许我在构建阶段运行脚本。这完美地工作并解决了问题!非常感谢您帮我诊断这个问题。
    猜你喜欢
    • 2018-01-05
    • 2021-03-11
    • 1970-01-01
    • 2015-09-27
    • 2020-04-03
    • 1970-01-01
    • 2015-04-15
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多