【问题标题】:Importing cx_Oracle causes an Apache server to throw an internal server error导入 cx_Oracle 会导致 Apache 服务器引发内部服务器错误
【发布时间】:2020-04-19 07:38:07
【问题描述】:

我正在尝试将 cx_Oracle python 模块配置为与 RHL 上的 Apache 服务器一起使用。

我在我的用户帐户上安装了 python 模块和 oracle 客户端,经过一些配置后它运行良好(我必须设置 LD_LIBRARY_PATH 环境变量并创建指向 libclntsh.so.12.1 的符号链接)。

现在我想将此模块与 Apache 服务器一起使用,但在我的一个 python 脚本中导入它后,服务器开始抛出 500 错误。我在配置中所做的唯一更改是将$LD_LIBRARY_PATH$ORACLE_HOME 设置为全局变量,以确保将$PYTHON_EGG_CACHE 设置为/tmp,这样就不会有任何权限问题。

之后服务器仍然无法工作,所以我想看看错误是什么。我运行这些命令:

sudo su
sudo -u apache python
>>> import cx_Oracle

这工作得很好,现在我真的很困惑为什么它不能在服务器上工作。我有什么误解或做错了吗?

编辑:澄清一下,Apache 服务器与我的用户帐户位于同一台机器上。

【问题讨论】:

    标签: python linux oracle apache cx-oracle


    【解决方案1】:

    设置库搜索路径环境变量通常是弱点。设置它们的方式和位置取决于您的 Apache 版本。特别是有时您使用 shell 语法(并且引用的变量会被扩展),有时您需要绝对路径。

    如果您已经安装了 Oracle Instant Client(并且没有其他 Oracle 软件),那么只需按照Instant Client installation instructions 中的说明使用ldconfig(并且不要设置 LD_LIBRARY_PATH 或 ORACLE_HOME)。

    否则或 RHL,您可能想要编辑 /etc/sysconfig/httpd 并添加如下内容:

    export LD_LIBRARY_PATH=/home/cjones/instantclient 
    

    LD_LIBRARY_PATH=/home/cjones/instantclient
    

    但您的启动脚本可能不同,因此请检查您需要什么。

    【讨论】:

    • 感谢您的回答!我会尽快检查这个。我仍然不明白的一件事是,当我以 apache 用户身份手动运行它时,它如何工作,而当它在服务器上运行时它不能工作。两种情况下的环境变量不应该相同吗?
    • 在系统程序启动之前或在 su'ing 被视为安全功能时重置/删除环境变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2018-02-20
    • 2013-07-14
    • 1970-01-01
    • 2013-08-11
    • 2012-03-29
    相关资源
    最近更新 更多