如何在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
答案 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'的帮助!
npm i -d
,它将使用捆绑dep而不是新安装