Django:从本地开发推送时,SQLite 覆盖 Heroku 上的 POSTGRESQL 数据库

标签 django sqlite postgresql heroku django-models

所以我在本地进行了更改,然后推送到 github 和 heroku,然后当我访问我的实时 heroku 项目时,我注意到数据库奇怪地恢复为我在本地开发期间拥有的对象。

这很可能是因为我没有正确设置我的heroku postgresql db(这是我第一次使用django设置heroku postgresql)。

这是我的Settings.py的片段,请假设括号中的信息:

ON_HEROKU = os.environ.get('ON_HEROKU')
HEROKU_SERVER = os.environ.get('HEROKU_SERVER')


if ON_HEROKU:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': '<the name is here>',
            'USER': '<user is here>',
            'PASSWORD': '<password is here>',
            'HOST': '<host is here>',                      
            'PORT': '<port is here>',   
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'USER': '',
            'PASSWORD': '',
            'HOST': '',                      
            'PORT': '',  
        }
    }

我运行了syncdb,但它似乎什么也没做。 :

(venv)$ heroku run python manage.py syncdb --account personal
Running `python manage.py syncdb` attached to terminal... up, run.7965
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

根据记录,我第一次运行syncdb时,它似乎从未设置新用户,而只是尝试安装更多表。我不知道为什么,但这似乎是一个危险信号。

我还运行了以下命令来检查 postgres 数据库是否存在:

(venv)$ heroku addons --account personal | grep POSTGRES
heroku-postgresql:hobby-dev  HEROKU_POSTGRESQL_COBALT

尽管一切似乎都很好,但我的项目正在使用 SQLite db。我肯定错过了什么。任何建议表示赞赏。如果需要的话我可以展示更多。

最佳答案

Heroku 不提供 ON_HEROKU 环境变量。除非您自己设置,否则这将不起作用。

但是,无论如何,您都不应该在设置中对生产数据库值进行硬编码。作为Heroku docs解释一下,这些值是由环境变量提供的,应该使用 dj-database-url 库将其自动转换为正确的设置。因此,您可以使用 DATABASE_URL 环境变量的存在或不存在来在硬编码的 sqlite 设置和动态生产设置之间切换,或者甚至更好地在中设置 DATABASE_URL您的本地开发环境,也指向您的 sqlite 文件。

关于Django:从本地开发推送时,SQLite 覆盖 Heroku 上的 POSTGRESQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26094390/

相关文章:

python - Django Admin 的 "view on site"指向 example.com 而不是我的域

django - 在modeladmin中对代理模型的用户权限

java - 如何在android中使用GreenDao为数据库添加初始数据?

Python-Flask - 如何在不指定目录的情况下访问 pythonanywhere.com 上的 sqlite database.db?

带有 pg/postgres 的 node.js 纤维

具有公共(public)前缀问题的 PostgreSql hstore 扩展

python - Django:如何处理无法扩展的查询?

python - 搭建学习平台——将练习与类(class)联系起来——单字段还是外键?

java - 从小部件类连接到数据库

循环不返回值的函数