3

在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
4

2 回答 2

4

之所以不能开箱即用,是因为 redis 包附带了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,你就可以开始了。

于 2012-08-21T22:26:31.607 回答
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.su 上获得了来自 'blakmatrix_' 和 '@AvianFlu' 的帮助,谢谢

  • bundleddeps 告诉 npm 将 deps 与项目的其余部分一起打包,通常 node_modules 中的任何内容都不会打包
  • 但是,如果您告诉它,通过将 dep 名称放在捆绑的 dep 数组中,它将在打包时将该依赖项包含在您的应用程序中
  • 通过这样做,一旦你做了一个npm i -d例子,它将使用 bundle dep 而不是重新安装它
于 2012-08-21T19:12:58.487 回答