我在Heroku(雪松堆棧)上部署了一個Django(v 1.3.3)項目。它使用推薦的dj_database_url來配置settings.DATABASES。一切都很好(到這一點)。Heroku上的django-hstore
但是,我想開始使用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
當我運行這一點,我的print語句顯示我正確的(期望)數據庫所需的發動機(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。
我的問題是:
- 有誰知道爲什麼我的引擎是越來越重寫?如果是這樣,我該如何解決這個問題?
或
- 有另一種方式來使用hstore領域和Django 1.3.3,可能不要求有改變發動機(因此是多一點的Heroku友好)
你是怎麼結束工作了?我正在使用HStore w/Django&Heroku,並在跳入它之前對此陷阱保持警惕。 –