web-dev-qa-db-ja.com

mod_wsgiでの環境変数の設定Django

Apache/mod_wsgiの下のRHELインスタンスでDjangoを実行していますが、Pythonプロセスのいくつかの環境変数の設定に問題があります。コンポーネント(Apache、Python、mod_wsgi、外部ライブラリ)は、リポジトリからインストールされるのではなく、ソースからビルドされます。

特定の問題は、Oracleサポートのサポートです。 Python自分で起動するときに、コマンドラインでOracle_HOMELD_LIBRARY_PATHを設定すると、問題なくOracleインスタンスに接続できますが、接続できませんこれらの変数がWSGIプロセスに渡されるようです。

Apacheログに表示される特定のエラーメッセージは次のとおりです。

ImproperlyConfigured: Error loading cx_Oracle module: libclntsh.so.11.1: cannot open shared object file: No such file or 

ディレクトリ

VirtualHost(SetEnvを使用)、Apacheのenvvarsファイル、Apacheユーザーの.bashrcファイル、および.wsgiファイル(os.environ['Oracle_HOME']='...'を使用)で変数を設定しようとしましたが、すべて効果がありませんでした。最初の3つのケースでは、変数がPythonにまったくならないようです。os.environ['Oracle_HOME']を出力すると、値が設定されていないことを示します。

また、ここでのアドバイスに従って、LD_RUN_PATH evn varセットを使用してソースからmod_wsgi.soを再構築しようとしました: http://groups.google.com/group/modwsgi/browse_thread/thread/91dfa97330dfca2/ 474f818304d741d4 しかし、それも効果がありませんでした。

何が足りないのですか?これらのenv変数を正常に通過させるにはどうすればよいですか?前もって感謝します!

2

重要なのは、Oracleライブラリをld.so.confに追加したことのようです。

0

Ubuntuでは、

export Oracle_HOME=<your Oracle home>
export LD_LIBRARY_PATH=<your library path>

/etc/Apache2/envvarsはうまくいくようです。

他に何も役に立たない場合は、Apache起動スクリプトを編集して、Apacheデーモン起動の直前にエクスポート行の上に置くことができます(Debianでこのようなことをかなり前に行ったことを思い出します)。

3

ソースコードからApacheをビルドしたので、「httpd」実行可能ファイルと同じディレクトリにある「envvars」ファイルに次の行を追加できます。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/path/to/Oracle/lib/directory
export LD_LIBRARY_PATH

Mod_wsgiをコンパイルするときのLD_RUN_PATHメソッドも機能するはずですが、その機能を取得するために使用した正確なメソッド、つまり実行されたコマンドが表示されないため、機能しなかった理由についてコメントできません。ただし、次の形式になります。

make distclean
./configure
LD_RUN_PATH=some/path/to/Oracle/lib/directory make
Sudo make install

したがって、「make」を実行するときは、LD_RUN_PATHを同じ行に設定します。 'make'を実行する前に環境変数として個別に設定する場合は、環境変数を 'export'する必要があります。そうしないと、makeはコンパイラに渡しません。

1

別の可能な解決策は、起動スクリプトでLD_LIBRARY_PATHを設定することです-例: /etc/init.d/httpd

export Oracle_HOME=<your Oracle home>
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib
0
Doug Harris