gpt4 book ai didi

django - Heroku 应用程序数据库重置

转载 作者:行者123 更新时间:2023-12-03 18:35:55 27 4
gpt4 key购买 nike

在 Heroku 上运行 Python 入门后,我启动了我的第一个应用程序。一切似乎都运行良好,但过了一会儿(可能是几个小时),数据库会重置。我对根本原因的假设是我的 django 应用程序使用默认的 django 数据库(我认为是 SQLite),而 Heroku 默认支持 postgres。我还没有测试过这个,因为将我的应用程序更改为 postgres 似乎需要做很多工作,如果我不需要,我现在不想这样做。

总之,我的问题是,由于我的应用程序使用 SQLite,我的数据库没有保存吗?如果是这样,为什么我的应用程序可以正常工作?如果没有,我应该首先寻找解决问题的地方在哪里?

最佳答案

正如@DanielRoseman 所说,您不应该在 heroku 上使用 SQLite,因为 SQLite 在内存中运行,并将其数据存储在磁盘上的文件中。
让我引用 heroku doku 的话:

SQLite runs in memory, and backs up its data store in files on disk. While this strategy works well for development, Heroku’s Cedar stack has an ephemeral filesystem. You can write to it, and you can read from it, but the contents will be cleared periodically. If you were to use SQLite on Heroku, you would lose your entire database at least once every 24 hours.

Even if Heroku’s disks were persistent running SQLite would still not be a good fit. Since SQLite does not run as a service, each dyno would run a separate running copy. Each of these copies need their own disk backed store. This would mean that each dyno powering your app would have a different set of data since the disks are not synchronized.

Instead of using SQLite on Heroku you can configure your app to run on Postgres.



在 Django 中使用 postgres 真的很容易。您只需在设置文件中更改数据库适配器:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'password',
'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}

在他们的文档部分还有一个关于如何在 herku 上设置 django 应用程序的教程:

https://devcenter.heroku.com/articles/django-app-configuration

关于django - Heroku 应用程序数据库重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com