如何修复nodejitsu上的hiredis编译问题?

时间:2012-08-21 19:12:58

标签: redis nodejitsu

如何在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

2 个答案:

答案 0 :(得分:4)

它开箱即用的原因是因为redis包与hiredis捆绑在一起,hiredis是redis用于解析redis代码的C库。

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

在Pavel的解决方案中,他会覆盖CPPFLAGS和LD_OPTIONS环境变量,这反过来会强制hiredis库进行编译。不幸的是,这会对您的软件包使用的任何OTHER C库产生负面影响。

我建议以下列方式将redis与您的项目捆绑在一起:

npm install hiredis
npm install redis
npm uninstall hiredis

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

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

"bundledDependencies": ["redis"]

只需jitsu deploy,你就可以了。

答案 1 :(得分: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 thx上获得'blakmatrix_'和'@AvianFlu'的帮助!

  • bundleddeps告诉npm将deps与项目的其余部分一起打包,通常node_modules中没有任何内容被打包
  • 虽然如果你告诉它,通过将dep名称放在捆绑的dep数组中,它将在打包时包含你的应用程序的依赖
  • 通过执行此操作,例如,一旦执行npm i -d,它将使用捆绑dep而不是新安装