【问题标题】:Pushing to Heroku without overwriting the database在不覆盖数据库的情况下推送到 Heroku
【发布时间】:2014-04-10 09:53:13
【问题描述】:

我有一个更简单的问题,但由于我是 Heroku 和整个 git 概念的新手,所以我有点困惑。老实说,我用谷歌搜索了这个问题,但我没有找到足够的答案。也许你可以帮忙。

我刚开始编写一个基于Flaskr example 的Flask 应用程序,我将它推送到Heroku,因此我使用了Heroku Python Guide 并使用我的终端(在Mac 上)的以下行推送更改:

$ git add -A
$ git commit -m "Pushing to Heroku"
$ git push -f heroku

每次我使用这条线执行推送时,我的生产数据库都会再次为空。但我不希望这种情况一直发生。我能做些什么?也许你们对此有所了解。

【问题讨论】:

    标签: python git postgresql heroku flask


    【解决方案1】:

    发生这种情况是因为 SQLite 对于 Heroku 来说是一个糟糕的选择。以下内容摘自Heroku's docs

    SQLite 在内存中运行,并将其数据存储备份到磁盘上的文件中。虽然这种策略非常适合开发,但 Heroku 的 Cedar 堆栈有一个临时文件系统。您可以对其进行写入,也可以从中读取,但内容会定期清除。如果您要在 Heroku 上使用 SQLite,您将至少每 24 小时丢失一次整个数据库。

    即使 Heroku 的磁盘可以持久运行 SQLite,仍然不适合。由于 SQLite 不作为服务运行,因此每个 dyno 将运行一个单独的运行副本。这些副本中的每一个都需要自己的磁盘支持存储。这意味着为您的应用程序提供动力的每个测功机都会有一组不同的数据,因为磁盘未同步。

    您可以将应用配置为在 Postgres 上运行,而不是在 Heroku 上使用 SQLite。

    【讨论】:

      【解决方案2】:

      只需修改init_db function 以检查条目表是否已存在:如果存在,则不要加载 schema.sql

      【讨论】:

      • 这是一种可能性,是的,但我想知道 Git 中是否有这种可能性。不过谢谢!
      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多