Heroku应用程序数据库重置

时间:2016-02-17 12:36:42

标签: django heroku

在Heroku上运行Python入门后,我推出了我的第一个应用程序。一切似乎工作正常,但过了一会儿(可能是几个小时),数据库重置。我的根本原因假设是我的django应用程序使用的是默认的django数据库(我认为是SQLite),默认情况下Heroku支持postgres。我没有对此进行测试,因为将我的应用程序更改为postgres似乎需要付出相当多的工作,如果我不需要,我现在不想做的事情。

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

1 个答案:

答案 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