Django:使用 sqlite3 作为数据库在 Heroku 上部署应用程序

Posted

技术标签:

【中文标题】Django:使用 sqlite3 作为数据库在 Heroku 上部署应用程序【英文标题】:Django: Deploying an application on Heroku with sqlite3 as the database 【发布时间】:2015-10-02 10:54:33 【问题描述】:

我想在 Heroku 上部署一个使用 sqlite3 作为数据库的应用程序。但是,似乎 Heroku 不支持以 sqlite3 作为数据库的应用程序。这是真的吗?有没有办法在 Heroku 上部署我的 sqlite3 支持的应用程序?

PS:我已经使用 PythonAnywhere 成功部署了我的应用程序,但现在想知道是否有任何可能的方式使用 Heroku 进行部署。

【问题讨论】:

【参考方案1】:

由于 Heroku 的 dynos 没有跨部署持续存在的文件系统,因此像 SQLite3 这样的基于文件的数据库将不适合。不过,它是用于开发/快速原型的绝佳数据库。

Heroku 有a Postgres offering 但这将适合 - 免费层和基本的 9 美元/月层,适合业余爱好/小型项目。与 SQLite 相比,最大的好处是您可以获得其他方式无法获得的备份(以及所有其他 Postgres 功能)。

这里有更新 settings.py 以使用 Postgres 的指南:https://devcenter.heroku.com/articles/getting-started-with-django#django-settings

【讨论】:

来自 PythonAnywhere 开发人员的快速评论——人们可以在我们网站上使用的文件系统已备份,因此您确实可以为 SQLite 获取该文件系统。也就是说,我们绝对建议任何生产网站都应使用 mysql(也可在 PythonAnywhere 上使用,包括免费帐户)或 Postgres(这是我们网站上的一项付费功能)。 @elithrar 我是新手;你能解释一下“没有跨部署持续存在的文件系统”是什么意思吗? @SatashreeRoy Heroku 的 dynos(想想小型虚拟机或容器)非常动态。它们可以随时轻松地旋转和销毁。每次启动新的测功机时,都会创建一个新的(即空的)文件系统隔间,并随之创建一个新的(即空的)文件系统隔间,并填充您的应用程序和需求/运行时的所有“已部署”文件。实际上,这意味着每当您的应用程序将数据存储到文件中时,当测功机停止或被清理时,它们就会丢失。如果您并行运行多个 dyno(即扩展到超过 1 个),这也意味着所有 dyno 都不会看到彼此的文件。【参考方案2】:

Heroku有一篇详细的文章解释"Why is SQLite a bad fit for running on Heroku"https://devcenter.heroku.com/articles/sqlite3

【讨论】:

以上是关于Django:使用 sqlite3 作为数据库在 Heroku 上部署应用程序的主要内容,如果未能解决你的问题,请参考以下文章

加载数据转储时,将 Django 项目从 sqlite3 后端切换到 postgresql 失败

Django 2.0 SQLite3 到 MySQL loaddata 错误:“数据库后端不接受 0 作为 AutoField 的值。”

使用 sqlite3 在 django 中出现“太多 SQL 变量”错误

Django使用mysql存储数据

heroku 没有名为 _sqlite3 的模块

在 Django 中将 SQLite3 数据库迁移到 MySQL