js-bson:使用纯JS版本加载c++ bson扩展失败

Posted

技术标签:

【中文标题】js-bson:使用纯JS版本加载c++ bson扩展失败【英文标题】:js-bson: Failed to load c++ bson extension, using pure JS version 【发布时间】:2015-03-06 10:47:10 【问题描述】:

我尝试在 Arch linux 迷你计算机(cubox)上安装 mean.io 堆栈。 所以我安装了nodejs和mongodb包。

我用 Git 检索堆栈,进行了 npm 安装(没问题),但随后:

输入“grunt”后出现此错误:

[nodemon] v1.2.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node --debug server.js`
debugger listening on port 5858
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 
js-bson: Failed to load c++ bson extension, using pure JS version

fs.js:439
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory '/projects/mean/bower_components/jquery/dist/jquery.min.map'
    at Object.fs.openSync (fs.js:439:18)
    at Object.fs.readFileSync (fs.js:290:15)
    at module.exports (/projects/mean/node_modules/meanio/lib/bootstrap.js:31:27)
    at /projects/mean/node_modules/meanio/lib/mean.js:20:27
    at Config.onPackageRead (/projects/mean/node_modules/meanio/lib/config.js:101:25)
    at Promise.<anonymous> (/projects/mean/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
    at Promise.emit (events.js:95:17)
    at Promise.emit (/projects/mean/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.fulfill (/projects/mean/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
    at Object.cb (/projects/mean/node_modules/mongoose/lib/query.js:1146:30)
[nodemon] app crashed - waiting for file changes before starting...

节点版本:v0.10.35 npm 版本:2.1.18 MongoDB shell 版本:2.6.6

我现在能做什么??有什么想法吗??

附加信息:我在 npm 安装期间收到警告:

npm WARN cannot run in wd bson@0.2.16 (node-gyp rebuild 2> builderror.log) || (exit 0) (wd=/projects/mean/node_modules/bson)

这里是 builderror.log :

cat builderror.log 
gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at failNoPython (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:103:14)
gyp ERR! stack     at /usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:42:11
gyp ERR! stack     at F (/usr/lib/node_modules/npm/node_modules/which/which.js:38:25)
gyp ERR! stack     at E (/usr/lib/node_modules/npm/node_modules/which/which.js:41:29)
gyp ERR! stack     at /usr/lib/node_modules/npm/node_modules/which/which.js:52:16
gyp ERR! stack     at Object.oncomplete (fs.js:108:15)
gyp ERR! System Linux 3.14.27-1-ARCH
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /projects/mean/node_modules/bson
gyp ERR! node -v v0.10.35
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 

我确实安装了 python (pacman -S python)。 python -V -> Python 3.4.2

###### 更多信息:

在这上面花了很多时间之后,我发现了一些东西。似乎“凉亭安装”无法以 root 身份启动。 当我启动“npm install”时,它会调用“bower install”并失败。

我尝试启动“npm install --allow-root”,但它也不起作用。

所以我想在archlinux中创建一个新用户,但我也不知道我应该添加他什么组。 (我确实创建了一个,带有一些随机组,但 npm 因权限错误而失败)。

如果有人可以向我发送命令以在良好组中创建用户,那么我可以测试这是否解决了问题,那将是完美的。

这是我在使用属于“users”组的新用户启动 npm install 时遇到的错误:

Error: EACCES, open '.bower-registry/bower.herokuapp.com/lookup/angular_d18b8'
Installing module: mean-admin:
rm: could not remove file (code EACCES): packages/contrib/mean-admin/.bowerrc
更多信息:

我从一开始就重新安装了所有东西,而不是 root。在 wheel 组中创建一个用户。现在我在这里安装 npm 时卡住了:

[tyvain@alarm fast-annonces]$ npm install 
npm WARN package.json express@4.10.6 No README data
npm WARN package.json gridfs-stream@0.5.3 No README data
npm WARN package.json supertest@0.11.0 No README data
\
> mean@0.4.2 postinstall /projects/fast-annonces
> node node_modules/meanio/node_modules/mean-cli/bin/mean-postinstall


module.js:340
    throw err;
          ^
Error: Cannot find module '/projects/fast-annonces/node_modules/meanio/node_modules/mean-cli/bin/mean-postinstall'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3

npm ERR! Linux 3.14.27-1-ARCH
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install"
npm ERR! node v0.10.35
npm ERR! npm  v2.1.18
npm ERR! code ELIFECYCLE
npm ERR! mean@0.4.2 postinstall: `node node_modules/meanio/node_modules/mean-cli/bin/mean-postinstall`
npm ERR! Exit status 8
npm ERR! 
npm ERR! Failed at the mean@0.4.2 postinstall script 'node node_modules/meanio/node_modules/mean-cli/bin/mean-postinstall'.
npm ERR! This is most likely a problem with the mean package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node node_modules/meanio/node_modules/mean-cli/bin/mean-postinstall
npm ERR! You can get their info via:
npm ERR!     npm owner ls mean
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /projects/fast-annonces/npm-debug.log

这是一场噩梦!! :)

【问题讨论】:

【参考方案1】:

我用这个命令解决了问题

apt-get install nodejs-legacy

【讨论】:

【参考方案2】:

不幸的是,以上所有的答案都只对了一半..花了很长时间才弄清楚..

通过 npm 安装 Mongoose bson 会引发警告并导致错误...

npm install -g node-gyp

git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild

这就像魔术一样!

【讨论】:

您在哪个目录中执行这些步骤? node-gyp 是全局安装的,而 js-bson 在根 app 文件夹的 node_modules 和 node_modules/mongoose/node_modules 中【参考方案3】:

在 ubuntu 14.04 上,我需要在 /usr/bin 中创建一个链接,因为 /usr/bin/env 正在寻找 /usr/bin/node

ln -s /usr/bin/nodejs /usr/bin/node

可以在每个目录的 builderror.log 中找到错误消息,因此对于消息:

bson@0.2.21 安装 /usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson (node-gyp 重建 2> builderror.log) || (0号出口) 查看此文件以获取有关确切问题的更多信息

/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/builderror.log

【讨论】:

【参考方案4】:

我猜你在安装 mongodb 库时没有可用的 make 工具。我建议你这样做 麦克:

xcode-select --install 

Ubuntu:

sudo apt-get install gcc make build-essential 

然后运行

rm -rf node_modules
npm cache clean
npm install

你需要 python 2 来编译它。如果您的 python 路径是针对 python 3 的,那么请执行以下操作:

npm config -g set python "/usr/bin/python2"

“EACCES”错误意味着程序没有足够的权限来做尝试做的事情。

根据我读到的关于群组here 的内容,您需要将用户添加到群组wheel。使用这个命令:

gpasswd -a [user] [group]

点击链接详细了解群组和用户。

【讨论】:

我已经从你那里读过这个答案,但我有 arch linux 而不是 ubuntu。 sudo 不起作用......并且构建基本不存在 在 Arch 上:pacman -S kernel26-headers file base-devel abs 应该可以解决问题。 通过makepkg 使用部分了解更多关于在安装时构建包的信息 我对此一点都不熟悉......它问我这个问题: :: 有 4 个提供程序可用于 kernel26-headers: :: Repository core 1) linux-headers-d3plug 2) linux-headers-sun5i 3) linux-headers-sun5i-staging 4) linux-sun4i-headers 我选择选项 1,是否 rm -rf node_modules npm cache clean npm install ----> 还是同样的问题..

以上是关于js-bson:使用纯JS版本加载c++ bson扩展失败的主要内容,如果未能解决你的问题,请参考以下文章

c++ bson扩展加载失败,使用mongodb访问mongodb时使用纯js版本

运行 mongodb-backed node app 时无法加载 C++ bson 扩展,使用纯 JS 版本错误

使用纯JS版本无法加载c ++ bson扩展[重复]

使用纯JS版本无法加载c ++ bson扩展[重复]

failed-to-load-c-bson-extension

使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误