【问题标题】:Prevent Django SQLite db from being overwritten while pushing to Heroku防止 Django SQLite db 在推送到 Heroku 时被覆盖
【发布时间】:2014-07-07 11:07:38
【问题描述】:

我有一个 Django 应用程序,它在它的模型中存储了大量数据。问题是,每当我部署到 Heroku 时,即使是很小的变化,具有正确数据的远程数据库都会被本地虚拟数据数据库覆盖。

场景:

我有一个远程数据库文件my_db。现在,当推送到 heroku 时,我只是 git add > git commit 仅包含更改的文件而不是整个项目。我的问题在于,它仍然以某种方式用本地数据覆盖远程数据库。

有没有办法防止这种情况发生?

【问题讨论】:

    标签: django git sqlite heroku


    【解决方案1】:

    Heroku does not provide a persistent filesystem.

    我参与过的大多数 Heroku 应用程序都使用 PostgreSQL 作为他们的数据库,所以这不是问题。但是 SQLite 只是一个位于某个目录中的文件,所以每次部署数据库都会丢失。

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

    如果您坚定地致力于 SQLite,您可能还有其他一些选择:

    • 在每次推送之前备份您的数据库文件,并在推送之后恢复它。
    • 将您的生产数据库添加到您的 Git 存储库,这样它将与您的应用程序一起部署(请注意,我不建议这样做)。
    • 许多用户use Amazon S3 to store other types of assets。您也许可以对您的数据库使用类似的过程,但我怀疑这样做会带来一些非常严重的安全风险。

    【讨论】:

    • 您如何执行选项 #2,即将生产数据库添加到您的 git 存储库?
    • @devhaven.herokuapp.com,我强烈建议不要这样做,但您只需像任何其他文件一样将数据库文件添加到存储库中,并确保根据需要提交更改。请注意,如果您打算修改 Heroku 上的数据库,则此选项是一个特别糟糕的主意:我认为您不能在那里提交更新,并且临时文件系统可能仍然是一个问题。例如,如果您将它用作只读设置数据库,它会工作得相当好。请认真考虑迁移到 PostgreSQL(或其他受支持的客户端-服务器数据库)。
    【解决方案2】:

    您应该将 db 文件添加到 .gitignore

    【讨论】:

    • 这是一个有效的答案。但是,知道为什么它仍然会覆盖我的所有文件吗?
    • 我只能猜测,因为我不知道 heroku 或您如何设置部署。但是,即使您没有添加或提交本地 db 文件,看起来您的存储库中仍然存在它的一个版本。如果通过签出部署代码更改,则该数据库文件将覆盖您的生产数据库
    猜你喜欢
    • 2014-11-23
    • 2013-01-17
    • 2018-06-27
    • 2013-10-21
    • 1970-01-01
    • 2019-07-14
    • 2017-12-19
    • 2021-02-08
    • 2020-07-23
    相关资源
    最近更新 更多