Heroku (cedar stack) にデプロイされた Django (v 1.3.3) プロジェクトがあります。settings.DATABASES の構成には、推奨される dj_database_url を使用します。すべてがうまく機能します(この時点まで)。
ただし、アプリケーションの一部に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) 値に戻っていることがわかります。また、モデルの 1 つをインポートして get を実行してオブジェクトをロードすると、hstore フィールドの値は文字列になり、キーにアクセスしようとすると次のエラーが発生します。
TypeError: string indices must be integers, not str
この作品はローカルで見つけることに注意してください。しかし、heroku にデプロイした後、辞書として値にアクセスしようとすると、上記の TypeError がスローされます。
私の質問は次のとおりです。
- 私のエンジンがオーバーライドされている理由を誰か知っていますか? もしそうなら、どうすればこれを修正できますか?
また
- エンジンを変更する必要がない可能性がある Django 1.3.3 で hstore フィールドを使用する別の方法はありますか (したがって、もう少し Heroku フレンドリーになります)