【问题标题】:How to fix hiredis compilation issue on nodejitsu? [closed]如何解决 nodejitsu 上的hiredis 编译问题? [关闭]
【发布时间】:2012-08-17 04:33:47
【问题描述】:

在 nodejitsu 上部署后如何修复hiredis 编译问题?

部署到 nodejitsu 后,我从jistu logs 命令收到以下错误。

ld.so.1: node: fatal: relocation error: file /opt/haibu/apps/<user>/<app>/package/node_modules/redis/node_modules/hiredis/build/Release/hiredis.node: symbol redisReaderCreate: referenced symbol not found

【问题讨论】:

标签: redis nodejitsu


【解决方案1】:

我必须将以下内容添加到 package.json

"bundledDependencies": ["redis"]

https://npmjs.org/doc/json.html#bundledDependencies

可选择尝试将以下内容添加到 package.json

"env": {
    "CXX": "/opt/local/bin/g++ -m64",
    "CPPFLAGS": "-I/opt/local/include",
    "LD_OPTIONS": "-L/opt/local/lib -lsocket -lnsl",
    "PYTHON": "/opt/local/bin/python2.7"
}

webchat.jit.suthx 上收到了来自“blakmatrix_”和“@AvianFlu”的帮助!

  • bundleddeps 告诉 npm 将 deps 与项目的其余部分一起打包,通常 node_modules 中的任何内容都不会打包
  • 不过,如果您告诉它,通过将 dep 名称放在捆绑的 dep 数组中,它会在打包时将该依赖项包含在您的应用中
  • 例如,一旦您执行npm i -d,它将使用捆绑软件dep,而不是重新安装它

【讨论】:

    【解决方案2】:

    之所以不能开箱即用是因为redis包是捆绑了hiredis的,hiredis是redis用来解析redis代码的C库。

    Nodejitsu 不保证 C 库可以开箱即用,因为代码必须在其服务器上编译,并且不保证它会以与您的开发环境相同的方式执行 makefile。

    在 Pavel 的解决方案中,他覆盖了 CPPFLAGS 和 LD_OPTIONS 环境变量,从而强制hiredis 库进行编译。不幸的是,这将对您的包使用的任何其他 C 库产生不利影响。

    我建议通过以下方式将 redis 与您的项目捆绑:

    npm install hiredis
    npm install redis
    npm uninstall hiredis
    

    Redis 会检测到您已经安装了hiredis,因此它不会将其安装为依赖项。然后,只需在安装 redis 后删除hiredis。 Redis 将自动回退到 Javascript 解析器,这有点慢(但团队正在努力改进它)。

    然后,将“redis”添加到捆绑的依赖项中:

    "bundledDependencies": ["redis"]
    

    只需jitsu deploy,您就可以开始了。

    【讨论】:

    • 澄清一下:通常,c 库在 nodejitsu 上运行良好。大多数问题是由于使用 SmartOS 造成的,这很好,但并不总是在 linux 环境下处理 makefile。我们也预计这只是一个暂时的问题。
    • 谢谢。我刚刚将"bundledDependencies": ["redis"] 添加到package.json 并且它起作用了。我不必卸载hiredis
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2019-12-25
    • 1970-01-01
    • 2020-10-29
    • 2021-06-12
    • 2021-11-05
    相关资源
    最近更新 更多