在Heroku上运行Python入门后,我推出了我的第一个应用程序。一切似乎工作正常,但过了一会儿(可能是几个小时),数据库重置。我的根本原因假设是我的django应用程序使用的是默认的django数据库(我认为是SQLite),默认情况下Heroku支持postgres。我没有对此进行测试,因为将我的应用程序更改为postgres似乎需要付出相当多的工作,如果我不需要,我现在不想做的事情。
总之,我的问题是,由于我的应用程序使用SQLite,我的数据库是否未保存?如果是这样,为什么我的应用程序可以工作?如果没有,我应该首先找到解决问题的地方?
答案 0 :(得分:2)
正如@DanielRoseman所说,你不应该在heroku上使用SQLite,因为SQLite在内存中运行,并将其数据存储备份在磁盘上的文件中。 让我引用heroku doku:
SQLite在内存中运行,并将其数据存储备份在磁盘上的文件中。虽然这种策略适用于开发,但Heroku的Cedar堆栈有一个短暂的文件系统。您可以写入它,并且可以从中读取,但内容将定期清除。如果您在Heroku上使用SQLite,则至少每24小时丢失一次整个数据库。
即使Heroku的磁盘持续运行SQLite仍然不太适合。由于SQLite不作为服务运行,因此每个dyno将运行单独的运行副本。每个副本都需要自己的磁盘备份存储。这意味着每个为您的应用程序供电的dyno都会有一组不同的数据,因为磁盘未同步。
您可以将应用配置为在Postgres上运行,而不是在Heroku上使用SQLite。
在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