2013-05-06 17 views
11

私は/home/user/.bashrc(と/etc/bash.bashrcの後者)で定義されているDjango設定でいくつかの環境変数を読み込もうとしていますが、すべて私は得るKeyErrorの例外です。私は私の環境変数が設定されていることを知っています。なぜなら、それらをターミナルで印刷できるからです(echo $ VAR_NAME)。これは簡単なことです。Djangoの設定ファイルで環境変数を取得できません

これは私が使用しているコードです。

from django.core.exceptions import ImproperlyConfigured 

msg = "Set the %s environment variable" 


def get_env_variable(var_name): 
    try: 
     return os.environ[var_name] 
    except KeyError: 
     error_msg = msg % var_name 
     raise ImproperlyConfigured(error_msg) 

OS_DB_USER = get_env_variable('MY_USER') 
OS_DB_PASS = get_env_variable('MY_PASS') 
OS_DB_DB = get_env_variable('MY_DB') 
OS_GAME_LOGS = get_env_variable('DIR_LOGS') 

私はただ欠けているものを見つけることができません。そこに何か提案はありますか?

ありがとうございました

EDIT:Apacheでmod_wsgiを実行しています。

+0

どのようにサーバーを実行していますか? – Rohan

+0

私はApacheでmod_wsgiを使用してプロジェクトを実行しています。 – luistm

+0

これらはvirtualhostファイルで定義する必要がありますか? – luistm

答えて

1

私は最近、この原因を自分自身を発見しました。

apache/mod_wsgiで実行している場合、アプリケーションは別のユーザーで実行されるため、これらの環境変数は設定されません。あなたのオプションは以下のとおりです。Apacheはユーザーとしてwsgidaemon・プロセスを実行するためにApacheを伝えるようにコードを実行し、または

  • ユーザーの環境変数を設定し

    あなたのVirtualHost設定で
    1. 使用のApacheのsetenvディレクティブ、
  • +1

    プロセス環境変数については、それらのどれも厳密には動作しません。 SetEnvディレクティブは、要求ごとのWSGI環境変数のみを設定し、環境変数は処理しません。 Apacheユーザーの環境に何かを設定することは、Apacheがrootとして起動され、きれいなデフォルトのホスト環境を継承するのに役立ちません。あなたはグローバルなデフォルトのホスト環境にものを追加したくないです。また、デーモンモードを特定のユーザーとして使用すると、ユーザーのログインスクリプトが実行されることはなく、そのようにして環境変数を取得することもできます。 –

    +1

    最も簡単なことは、ロードされるWSGIスクリプトファイルの副作用としてプロセス環境変数を設定することです。 –

    関連する問題