【问题标题】:Why is LD_LIBRARY_PATH undefined when I run my Node.js script using mocha on macOS?为什么在 macOS 上使用 mocha 运行 Node.js 脚本时未定义 LD_LIBRARY_PATH?
【发布时间】:2020-10-27 02:53:13
【问题描述】:

很高兴见到你,我在这里问一个问题,我正在尝试使用 oracledb 进行单元测试,但由于找不到 oracle 客户端,我收到错误,我在使用运行测试文件时发现了测试mocha 我的 oracle 变量之一是未定义的,这可能是我的代码失败的原因,当我使用节点命令运行相同的文件时,这个变量具有实际价值,有人知道它发生了什么以及如何修复它?


  • 节点 v10.21.0
  • 摩卡8.0.1
  • os macOS Catalina 10.15.5
  • oracle 12.2.0.1.0

文件:

console.log('OCI_LIB_DIR', process.env.OCI_LIB_DIR);
console.log('OCI_INC_DIR', process.env.OCI_INC_DIR);
console.log('LD_LIBRARY_PATH', process.env.LD_LIBRARY_PATH);

$ mocha file.js

结果:

OCI_LIB_DIR /Users/lmorales/Documents/instantclient_12_2/
OCI_INC_DIR /Users/lmorales/Documents/instantclient_12_2/sdk/include
LD_LIBRARY_PATH /Users/lmorales/Documents/instantclient_12_2

$ node file.js

结果:

CI_LIB_DIR /Users/lmorales/Documents/instantclient_12_2/
OCI_INC_DIR /Users/lmorales/Documents/instantclient_12_2/sdk/include
LD_LIBRARY_PATH undefined

screenshot with evidence

【问题讨论】:

    标签: node.js environment-variables mocha.js node-oracledb


    【解决方案1】:

    Apple macOS 的 SIP 停止将 LD_LIBRARY_PATH 等变量传递给子 shell(这已在 node-oracledb 问题 #231 中注明)。 node-oracledb 安装文档从未在 macOS 上推荐过 LD_LIBRARY_PATH,并且在许多版本之前就停止推荐过 DYLD_LIBRARY_PATH。

    我还注意到您正在设置几年来不需要的 OCI* 变量。

    请阅读安装文档https://oracle.github.io/node-oracledb/INSTALL.html#instosx 了解当前安装 node-oracledb 的方法。
    您可以使用新的 initOracleClient() 调用,在您的 node_modules/oracledb/build/Release 目录中创建一个符号链接,或者将 Instant Client 放在 /usr/local/lib - 请参阅文档。

    【讨论】:

    • 是的,因为我使用的是oracle 12,所以我们需要使用太旧的配置
    • Oracle Client 版本与此无关。您仍然可以将 Oracle 客户端 12 与最新版本的 node-oracledb 一起使用。 (但如果您的数据库版本是 11.2 或更高版本,那么您可以/应该更新您的 Oracle 客户端版本)
    猜你喜欢
    • 2012-03-07
    • 2015-05-25
    • 1970-01-01
    • 2020-05-22
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多