0

私はすべてを試したようですが、32 ビット モードで Python を実行することはできませんでした。

だからここに私の状況があります:

OSX 10.8 を実行しています。Oracle 10g2 データベースに接続する必要がある CherryPy アプリを開発しました。CX_Oracle が 64 ビットで動作しないというよく知られた問題があるため、32 ビットで実行する必要があります。

<IfModule wsgi_module> 
<Directory "/Library/WebServer/WSGI-Executables">
AllowOverride None
Options None FollowSymLinks
Order allow,deny
Allow from all
SetEnv CONFIG_PATH /Users/bioffe/src/Icap/trunk/cgi-bin
SetEnv ORACLE_HOME /Applications/ORACLE/instantclient_10_2
SetEnv TNS_ADMIN /Applications/ORACLE/instantclient_10_2
SetEnv LD_LIBRARY_PATH /Applications/ORACLE/instantclient_10_2
SetEnv DYLD_LIBRARY_PATH /Applications/ORACLE/instantclient_10_2
SetEnv VERSIONER_PYTHON_PREFER_32_BIT yes

</Directory>
WSGIPythonHome  /usr/local/bin/python2.7-32
WSGIPythonPath /Library/WebServer/WSGI-Executables
WSGIScriptAlias /etc  /Library/WebServer/WSGI-Executables/ETCConfWebApp.py
#WSGIDaemonProcess etc_config user=bioffe group=wheel threads=4 python_path=/Library/Python/2.7/site-packages/
ProxyPreserveHost On
SetEnv VERSIONER_PYTHON_PREFER_32_BIT yes

</IfModule>

アプリのコード

@cherrypy.expose
def index(self):
    result = ''
    for key, value in os.environ.items():
        result += key + '=' + value + '\r\n'

    cherrypy.response.headers['Content-Type']= 'text/plain'

    result += '*' * 10
    result += '\rCurrent Dir = %s \r' % os.getcwd()
    result += '__file__ = %s \r' % __file__
    result += 'PID=%d \r' %  os.getpid()
    result += 'PPID=%d \r' % os.getppid()
    result += 'UID=%d \r' % os.getuid()
    import threading
    th = threading.current_thread()
    result += "ThreadID=%d name=%s \r" %(th.ident,th.name)
    result += "ThreadPool Size=%d \r" %(cherrypy.server.thread_pool)
    result += "ThreadPool Max Size=%d \r" %(cherrypy.server.thread_pool_max)
    import sys
    result += "%s \r" %(sys.version)
    result += "%d \r" %(sys.maxint)

出力

PATH=/usr/bin:/bin:/usr/sbin:/sbin
**********
Current Dir = /Library/WebServer/WSGI-Executables 
__file__ = /Library/WebServer/WSGI-Executables/ETCConfWebApp.py 
PID=16170 
PPID=16167 
UID=70 
ThreadID=140735313402208 name=MainThread 
ThreadPool Size=10 
ThreadPool Max Size=-1 
2.7.1 (r271:86832, Jun 25 2011, 05:09:01) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] 
9223372036854775807 <- 64 bit, I want to see 32-bit's 2147483647 

これまでに試したことは次のとおりです。

  1. 環境変数を設定して Python を強制するには

    エクスポート VERSIONER_PYTHON_PREFER_32_BIT=はい

    これは WSGI_mod によって無視されます。os.environ にはPATH環境変数が 1 つだけ含まれています

  2. デフォルト値を設定して Python を強制し、_www(70) ユーザーがアクセスできるようにします。

    defaults write com.apple.versioner.python Prefer-32-Bit -bool yes

  3. そこから virtualenv と lipo thin i386 実行可能ファイルを作成するには

    WSGIPythonHome /usr/local/bin/python2.7-32

  4. 薄い実行可能ファイルをデフォルトの python 環境に作成することはできませんでした。

  5. python2.7-32 のヘッダーと *.sos を使用して mod_wsgi リンクをコンパイルします。

何も機能しません。誰かがこの問題に光を当てることができるのだろうかと思っていました。

ボーナスQ:追加しました

WSGIDaemonProcess etc_config user=bioffe group=wheel threads=4 python_path=/Library/Python/2.7/site-packages/

UID bioffe で実行される追加の https プロセスが表示されますが、アプリはまだ UID _www の httpd プロセスによって処理されています。リクエストが別の httpd プロセスによって処理されているのはなぜですか?

4

1 に答える 1

1

読んだことがありますか:

また、SetEnv は環境変数を設定しないことに注意してください。mod_wsgi の場合、要求ごとに辞書で WSGI アプリケーションに渡される環境変数を要求ごとに設定します。したがって、SetEnv を使用してプロセス環境変数を設定することはできません。

WSGIDaemonProcess に関しては、必要な WSGIProcessGroup が欠落している可能性があります。

mod_wsgi の公式サイトにある mod_wsgi のドキュメントを読んでいることを確認してください。

他にもいくつか間違っている可能性がありますが、それを確認するのに役立つ詳細が提供されていないため、わかりにくい.

于 2013-08-31T03:23:42.500 に答える