6

Oracle データベースを使用する Python で Web サービスをコーディングしています。cx_Oracle をインストールして動作させていますが、Apache を使用して Python コードを CGI として実行すると問題が発生します。

たとえば、次のコードはコマンド ラインで完全に機能します。

#!/usr/bin/python 
import os 
import cx_Oracle 
import defs as df 

os.putenv('ORACLE_HOME', '/oracledb/10.2.0/') 
os.putenv('LD_LIBRARY_PATH', '/oracledb/10.2.0/lib') 

con = cx_Oracle.Connection(df.DB_USER, df.DB_PASS, df.DB_SID) 
print con

しかし、CGI として実行すると、Apache エラー ログに「cx_Oracle.InterfaceError: Oracle 環境ハンドルを取得できません」というメッセージが表示されます。

ORACLE_HOMEネットを検索したところ、環境変数と環境変数を設定する必要があると誰もが言っていLD_LIBRARY_PATHます。os.putenvどういうわけか、コードでわかるように、CGI スクリプトはこの環境変数を使用して定義しても、この環境変数にアクセスできません。

私は何を間違っていますか?ありがとう!

4

9 に答える 9

5

これは私のために働いています:

os.putenv('ORACLE_HOME', '/oracle/client/v10.2.0.3-64bit')
os.putenv('LD_LIBRARY_PATH', '/oracle/client/v10.2.0.3-64bit/lib')
os.environ['ORACLE_HOME'] = '/oracle/client/v10.2.0.3-64bit'
os.environ['LD_LIBRARY_PATH'] = '/oracle/client/v10.2.0.3-64bit/lib'

最初に注意してputenvから、更新してenvironください。

于 2011-03-22T16:31:57.413 に答える
3

Don't forget adding env module for apache:

a2enmod env

in .htaccess or apache configuration:

SetEnv LD_LIBRARY_PATH /oracle_lib_path

in /etc/apache2/envvars doesn't work

于 2012-01-24T12:37:19.687 に答える
2

私はなんとか問題を解決することができました。

どういうわけか、apacheが使用していたユーザーとグループは環境変数にアクセスできませんでした。この変数にアクセスできることが確実なユーザーにapacheが使用していたユーザーとグループを変更することで、問題を解決しました。

Pythonを使用してこの変数を設定するのが非常に難しいのは奇妙な(そしてイライラする)ことです。

私の質問に答えてくれたみんなに感謝します!

于 2009-07-17T14:17:25.643 に答える
2

環境変数を設定する必要がなくなると、問題を完全に解消できます。ここでは、Oracle Instant Client をボックスにインストールしてこれを行う方法について説明します。

環境変数を設定せずにLinuxにOracle Instantclientをインストールしますか?

于 2009-07-03T07:10:02.073 に答える
1

シェル スクリプトを使用して CGI を実装し、シェル スクリプトで環境変数を設定し、シェル スクリプトから python スクリプトを呼び出すことができます。

特にライブラリのロード方法を扱っている場合は、Python内から環境変数を設定するのは難しいようです...

于 2009-07-01T18:42:52.390 に答える
1

質問者のコードがなぜ機能しなかったのかという実際の質問はまだ答えられていません。

答えは、環境変数 LD_LIBRARY_PATH は、アプリケーション (この場合は Python インタープリター) の開始時にのみ評価されるということです。Python が開始された時点で、この変数をいじるには遅すぎます。os.environ または os.putenv のどちらを使用して設定するかはまったく問題ではありません (ただし、一般的には前者を使用する必要があります)。

解決策は、Python スクリプトを開始するラッパー スクリプトで LD_LIBRARY_PATH 環境変数を設定するか、その環境変数が既に設定されている状態で Apache を開始することです。OpenSUSE では、たとえば /etc/sysconfig/apache2 で LD_LIBRARY_PATH を設定することにより、後者を実行できます。

ちなみに、CGI スクリプトの代わりに mod_wsgi を使用した場合も同じ問題が発生します。mod_wsgiインストールの問題ページの「Python 共有ライブラリが見つからない」セクションを参照してください。

于 2011-11-30T18:42:25.010 に答える
1

問題に関する短いグーグルから、あなたの問題は末尾/に関連している可能性がありますORACLE_HOME.
それを削除してみて(そしてリッチーからの提案も使用して)、それが機能するかどうかを確認してください。

于 2009-07-01T18:32:57.880 に答える