Apache/mod_wsgiの下のRHELインスタンスでDjangoを実行していますが、Pythonプロセスのいくつかの環境変数の設定に問題があります。コンポーネント(Apache、Python、mod_wsgi、外部ライブラリ)は、リポジトリからインストールされるのではなく、ソースからビルドされます。
特定の問題は、Oracleサポートのサポートです。 Python自分で起動するときに、コマンドラインでOracle_HOME
とLD_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変数を正常に通過させるにはどうすればよいですか?前もって感謝します!
重要なのは、Oracleライブラリをld.so.conf
に追加したことのようです。
Ubuntuでは、
export Oracle_HOME=<your Oracle home>
export LD_LIBRARY_PATH=<your library path>
/etc/Apache2/envvars
はうまくいくようです。
他に何も役に立たない場合は、Apache起動スクリプトを編集して、Apacheデーモン起動の直前にエクスポート行の上に置くことができます(Debianでこのようなことをかなり前に行ったことを思い出します)。
ソースコードから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はコンパイラに渡しません。
別の可能な解決策は、起動スクリプトでLD_LIBRARY_PATHを設定することです-例: /etc/init.d/httpd
:
export Oracle_HOME=<your Oracle home>
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME/lib