我似乎尝试了一切,但我无法在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
以下是迄今为止尝试的内容:
通过设置环境变量强制Python
export VERSIONER_PYTHON_PREFER_32_BIT = yes
WSGI_mod忽略了这个。 os.environ只包含一个 PATH 环境变量
通过设置默认值来强制Python,并使_www(70)用户可以访问它。
默认写入com.apple.versioner.python Prefer-32-Bit -bool yes
用它创建virtualenv和lipo thin i386可执行文件
WSGIPythonHome /usr/local/bin/python2.7-32
要将精简可执行文件创建到默认的python环境中,都无效。
使用python2.7-32的标题和* .sos编译mod_wsgi链接。
没有任何作用。我想知道有人可以对这个问题有所了解。
奖励问: 我添加了WSGIDaemonProcess etc_config user=bioffe group=wheel threads=4 python_path=/Library/Python/2.7/site-packages/
我看到使用UID bioffe运行的额外https进程,但我的应用程序仍由httpd进程使用UID _www进行处理。为什么我的请求被不同的httpd进程处理?
答案 0 :(得分:1)
你读过:
另请注意,SetEnv不会设置环境变量。对于mod_wsgi,它为每个请求设置环境变量,这些变量在每个请求中在字典中传递给WSGI应用程序。因此,您无法通过SetEnv来设置流程环境变量。
对于WSGIDaemonProcess,您可能缺少需要使用它的所需WSGIProcessGroup。
请确保您正在阅读官方mod_wsgi网站上的mod_wsgi文档,因为此处有详细说明。
你可能还有其他一些错误,但很难说,因为没有提供有助于确认的细节。