2017-04-17 30 views
1

HerokuアプリケーションにPostgresデータベースを追加しました.Djangoアプリケーションに接続しようとしています。しかし、私のアプリは常にローカルのPostgresデータベースに接続します。DjangoをHeroku Postgresデータベースに接続する

settings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql', 
     'NAME': 'app_db', 
     'USER': 'admin', 
     'PASSWORD': '', 
     'HOST': 'localhost', 
     'PORT': '', 
    } 
} 

db_from_env = dj_database_url.config(conn_max_age=500) 
DATABASES['default'].update(db_from_env) 

私はHerokuのアプリでPostgresデータベースのためのURLであることを.envファイルに「DATABASE_URL」を設定しましたが、それは更新していないようですデータベース。私のアプリケーションは、ローカルのものではなく、Herokuデータベースに接続するように強制するにはどうすればよいですか?

+0

あなたのコードが 'import os;のようなもので' DATABASE_URL'環境変数を実際に見ていることを確認できますか? print os.environ ['DATABASE_URL'] '?これを 'db_from_env'変数の前に置いて、サーバを再起動して出力を確認してください。 – VeGABAU

+0

これはKeyErrorをスローします。実際に見ていないようです。私はdj_database_url.config()が.envファイルを読み込み、そこにDATABASE_URLの値を取得するはずだと思いましたか? 私は 'DATABASE_URL' = postgres:blahblahをエクスポートするとうまくいくようですが、実際にenv変数を格納したい場合は、.env – HLH

+0

でそれを持つだけではうまくいかない理由がわかりません.envファイルは、おそらく 'https:// github.com/theskumar/python-dotenv'の使用を検討してください。 – VeGABAU

答えて

1

開発時にローカルDBから読み取り、本番環境でHeroku DBを使用するように設定することができます。まず、ご存じのとおり、dj_database_urlが必要です。

local_settings.pyと呼ばれる別個の設定ファイルを作成することができます。普通のdb設定(デフォルトのDjango db設定など)があります。そして、あなたのsettings.pyに:

DATABASES = { 
    'default': dj_database_url.config() 
} 

そして、あなたのsettings.pyの下部にある:

# Tries to import local settings, if on dev, 
# import everything in local_Settings, which overrides the dj_database_url 
# If on deploy, local_settings won't be found so just ignore the ImportError 
try: 
    from .local_settings import * 
except ImportError: 
    pass 

だからあなたlocal_settings.pyは、あなたがそれを追加し、それを無視することができます(開発サーバーではなく、Herokuのアプリにする必要があります。 gitignore)。私はこれが理解できることを願っています。

関連する問題