防止将 Django SQLite 数据库推送到 Heroku 时被覆盖

7
我有一个使用Django开发的应用程序,它在其模型中存储了大量数据。问题是,每当我部署到Heroku时,即使只是进行了小的更改,正确数据的远程数据库也会被本地的虚拟数据数据库覆盖。
场景:
我有一个名为my_db的远程数据库文件。现在,当我推送到Heroku时,我只git addgit commit变化的文件而不是整个项目。我的问题在于,它仍然以某种方式用本地数据覆盖了远程数据库。
有没有办法防止这种情况发生?
2个回答

4

Heroku 不提供持久性文件系统

我参与的大多数Heroku应用程序使用PostgreSQL作为其数据库,因此这不是问题。但SQLite只是一个坐在某个目录中的文件,所以每次部署后您的数据库都将丢失。

最简单的解决方案可能是从SQLite迁移到PostgreSQL,后者在Heroku(和Django)上得到了很好的支持,并且不会在每次部署时丢失数据。

如果您坚定地支持SQLite,则可能有其他选项:

  • 在每次推送之前备份数据库文件并在推送后恢复它。
  • 将生产数据库添加到Git存储库中,这样它将随应用程序一起部署(请注意,我不建议这样做)。
  • 许多用户使用Amazon S3来存储其他类型的资产。虽然我猜测会有一些非常重要的安全风险,但您可能能够使用类似的过程处理您的数据库。

您如何执行选项#2,即将生产数据库添加到您的Git存储库中? - Henry Zhu
@devhaven.herokuapp.com,我强烈建议不要这样做,但你只需像添加其他文件一样将数据库文件添加到存储库中,并确保根据需要提交更改。请注意,如果您打算在Heroku上修改数据库,则此选项特别不好:我认为您无法在那里提交更新,并且短暂的文件系统仍可能是一个问题。例如,如果您将其用作只读设置数据库,则可以很好地工作。请认真考虑迁移到PostgreSQL(或另一个受支持的客户端服务器数据库)。 - Chris

0

你应该将数据库文件添加到.gitignore


1
这是一个有效的答案。但是,您知道为什么它仍然会覆盖所有我的文件吗? - Newtt
我只能猜测,因为我不了解Heroku或者你的部署设置。但是,尽管你没有添加或提交本地db文件,看起来仍然存在一个版本在你的代码库中。如果通过checkout部署代码更改,那么该db文件将覆盖你的生产数据库。 - hellsgate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接