2016-05-30 31 views
1

私は少し前にこれに似た質問を投稿しましたが、私が探していた答えを見つけることができませんでした。Djangoアプリは環境変数を見つけることができません

RDSデータベースを使用するAWS Elastic BeanstalkでデプロイするDjangoアプリを作成しました。私のElastic Beanstalkで環境は次のように私のsettings.pyファイルにアクセスされたデータベースにアクセスするために使用されるいくつかの環境変数を、持っている:

'NAME': os.environ['RDS_DB_NAME'], 

これはアプリのデプロイされたバージョンで正常に動作しますが、それはまだ開発中ですローカルのLinux環境でこれらの変数にアクセスすると非常に便利です。私は変数をエクスポートするbashスクリプトを書いており、これは正しい値を返す "echo $"を使って動作することをテストできます。

しかし、ローカルでアプリケーションを実行しようとすると、Djangoアプリが以前に宣言した環境変数を選択できないように、KeyError(具体的にはKeyError: 'RDS_DB_NAME')が表示されます。

私はちょっと困っています - アイデアやその他の質問は大歓迎です!

答えて

0

ubuntuでは、ホームディレクトリに移動して.bashrcというファイルを開きます。

export RDS_DB_NAME='<your_local_db_name>' 

近い端末と再度開く:

は、これを追加し、このファイルの末尾に以下の行を追加します。 djangoサーバーを実行し、完了します。

EDIT:

は、あなたがこのような状況を扱うことができるもう一つの方法は、環境変数を使用する際に条件を定義することで、いつ代わりに

'NAME': os.environ['RDS_DB_NAME'], 
+0

ご回答のおかげで、残念ながら、これはいないようです助けるために。私はまだ同じキーエラーを取得します。 –

+0

開いている端末タブをすべて閉じて、新しい端末でサーバを再実行しましたか? –

+0

はい、残念ながら変更はありません。 –

0

'NAME': os.environ.get('RDS_DB_NAME', ''),

を試してみてくださいローカル(ハードコーディングされた)変数を使用します。

次のコードスニペットは、AWS上でDjangoのアプリを展開する方法についてRealPython記事から取られる:

if 'RDS_DB_NAME' in os.environ: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
      'NAME': os.environ['RDS_DB_NAME'], 
      'USER': os.environ['RDS_USERNAME'], 
      'PASSWORD': os.environ['RDS_PASSWORD'], 
      'HOST': os.environ['RDS_HOSTNAME'], 
      'PORT': os.environ['RDS_PORT'], 
     } 
    } 
else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.postgresql_psycopg2', 
      'NAME': 'name', 
      'USER': 'user', 
      'PASSWORD': 'pass', 
      'HOST': 'localhost', 
      'PORT': '5432', 
     } 
    } 
+0

これは非常に便利です。ありがとうございます!しかし、最終的に完成したプロジェクトをGithubにデプロイする計画をしていて、データベースへのアクセスを公開したくないので、可能であれば環境変数を使用する方がよいでしょう。 –

2

私はあなただけ.envファイル変数にあなたを作成することができ、それによりdjango-environ

を使用することをお勧め必要。また、それは可能になります(ただし、これらに強制しない)DB全体構成を設定することができ、このようなURLとして(とあまりにもキャッシュなどのような他の):

DATABASE_URL=psql://urser:[email protected]:8458/database 
関連する問題