在不覆盖数据库的情况下推送到Heroku

时间:2014-03-07 09:59:24

标签: python git postgresql heroku flask

我有一个相当简单的问题,但由于我是Heroku的新手和整个git概念,我有点困惑。老实说,我用Google搜索了问题,但我找不到足够的答案。也许你可以提供帮助。

我刚刚开始根据Flaskr example对Flask应用程序进行编码,我将它推到了Heroku上,因此我使用Heroku Python Guide并使用以下行从终端推送更改(在Mac上) ):

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这种情况正在发生,因为SQLite是Heroku的糟糕选择。以下内容摘自Heroku's docs

  

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

     

即使Heroku的磁盘持续运行SQLite仍然不太适合。由于SQLite不作为服务运行,因此每个dyno将运行单独的运行副本。每个副本都需要自己的磁盘备份存储。这意味着每个为您的应用程序供电的dyno都会有一组不同的数据,因为磁盘未同步。

     

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