我在 Heroku(雪松堆栈)上部署了一个 Django(v 1.3.3)项目。它使用推荐的 dj_database_url 来配置 settings.DATABASES。一切都很好(到目前为止)。
但是,我想开始将django-hstore用于部分应用程序。根据文档,您必须将 settings.py 中的数据库引擎更改为:
'ENGINE': 'django_hstore.postgresql_psycopg2',
因此,在我的 settings.py 文件中,我执行以下操作:
DATABASES = {'default': dj_database_url.config()}
DATABASES['default']['ENGINE'] = 'django_hstore.postgresql_psycopg2'
在本地,一切对我来说都很好。我的具有 hstore 字段的模型效果很好(值是字典)。
但是,当我部署到 Heroku 时,数据库引擎被重置/覆盖为:
ENGINE: 'django.db.backends.postgresql_psycopg2'
为了调试它,我在我的设置文件中设置了引擎后打印了一个。然后,我运行 bash:
heroku run bash
接着:
python myapp/manage.py shell
当我运行它时,我的打印语句向我显示了所需引擎(django_hstore.postgresql_psycopg2)的正确(所需)数据库设置。但是,如果我这样做:
from django.conf import settings
print settings.DATABASES
我可以看到数据库引擎不再是 django_hstore,而是设置回正常(非 hstore)值。如果我导入我的一个模型并执行 get 加载对象,hstore 字段中的值是一个字符串,并且任何访问键的尝试都会抛出错误:
TypeError: string indices must be integers, not str
请记住,此作品可在本地找到。但是,在部署到 heroku 之后,任何将值作为字典访问的尝试都会抛出上面的 TypeError。
我的问题是:
- 有谁知道为什么我的引擎被覆盖?如果是这样,我该如何解决这个问题?
或者
- 是否有另一种方法可以在 Django 1.3.3 中使用 hstore 字段,这可能不需要更改引擎(因此对 Heroku 更友好)