安装完整的 Oracle 客户端(使用管理员工具)似乎已经解决了这个问题。不过,有一些细微差别需要注意:
wsgi.py
需要 ORACLE_HOME 的位置,因为它不是从 shell 传入的。就我而言,这wsgi.py
看起来像:
import os, sys
sys.path.append('/var/www/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
os.environ['ORACLE_HOME'] = '/client/oracle/product/11.2.0/db'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
在 Oracle 11.2.0 客户端中,库链接存在错误。要修复 Oracle 库链接:
- 导航到 $ORACLE_HOME/lib(在我的例子中是 /client/oracle/product/11.2.0/db/lib/)
- 删除文件 libexpat.so.1
- 作为用户 oracle:创建符号链接:libexpat.so.1 --> libexpat.so.1.5.2
此外,正确设置 Linux 加载程序也很重要。(注意:这相当于设置 LD_LIBRARY_PATH,但我认为以下是更清洁的解决方案)。创建一个包含Oracle Home库路径/etc/ld.so.conf.d/oracle.conf
的单行条目的文件。在我的情况下,它是. 然后运行。要验证加载程序是否正确配置,您可以检查 cx_Oracle 的共享对象路径:/client/oracle/product/11.2.0/db/lib
ldconfig
查找文件:作为超级用户,执行updatedb
,然后locate cx_Oracle.so | grep cx_Oracle\.so$
要测试文件:ldd <path>
输出应与此类似(如下)。如果您看到短语“未找到”,则说明加载程序路径有问题。
# ldd /usr/lib/python2.7/site-packages/cx_Oracle.so
linux-gate.so.1 => (0xb775c000)
libclntsh.so.11.1 => /client/oracle/product/11.2.0/db/lib/libclntsh.so.11.1 (0xb5a25000)
libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0xb588e000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb5873000)
libc.so.6 => /lib/libc.so.6 (0xb56c2000)
libnnz11.so => /client/oracle/product/11.2.0/db/lib/libnnz11.so (0xb5474000)
libdl.so.2 => /lib/libdl.so.2 (0xb546f000)
libm.so.6 => /lib/libm.so.6 (0xb5444000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb5429000)
libaio.so.1 => /lib/libaio.so.1 (0xb5427000)
libutil.so.1 => /lib/libutil.so.1 (0xb5422000)
/lib/ld-linux.so.2 (0x487b9000)
为方便起见,您可能还希望/etc/profile.d/oracle.sh
使用这些内容创建文件(注意,将 ORACLE_HOME 更改为您的特定安装路径):
export ORACLE_HOME=/client/oracle/product/11.2.0/db
export PATH=$PATH:$ORACLE_HOME/bin
重启使这些全局环境变量生效。
之后,Oracle 连接应该可以在任何情况下工作。我希望这些信息可以帮助其他在 Oracle 方面遇到问题的人!