bcrypt正在破坏我的Meteor应用,我该如何修复它?

17

我不确定这个问题应该提到stackoverflow还是serverfault。我安装了Meteor的accounts-password模块,本地运行正常,但在部署到服务器时出问题了。以下是详细情况:

我在OSX上本地运行最新的Meteor 1.0.5(操作系统刚刚更新完毕),使用--architecture os.linux.x86_64编译。部署到Ubuntu 14.04.2 LTS x86_64(刚刚更新完毕),运行nodejs v0.12.1(刚刚构建完成),使用nginx v1.4.0提供服务。

但仍然出现以下问题:

/home/secrethistory/bundle/programs/server/node_modules/fibers/future.js:245
                                            throw(ex);
                                                  ^
Error: Module did not self-register.
    at Error (native)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at bindings (/home/secrethistory/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
    at Object.<anonymous> (/home/secrethistory/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/bcrypt.js:3:35)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)

有什么建议或下一步可以查找的地方吗?


我猜测是新的Nodejs v0.12版本出了问题。尝试降级Node版本,然后再试一下。 - ajduke
我试过了,但仍然不起作用。我一直回退5个版本,直到0.10.1。使用“nvm install 0.10.1”。 - Wes Modes
3个回答

26

bcrypt 模块是与平台相关的(就像 fibers 一样),因此您需要在服务器上解压包后删除该模块:

rm -R path/to/bcrypt

然后重新安装它:

npm install bcrypt

2
是的,确实。就是这样。谢谢你。在我的安装脚本中,我能够添加两行额外的代码:`sudo rm -R ./npm/npm-bcrypt/node_modules/bcrypt; sudo npm install bcrypt` - Wes Modes
我也遇到了 simplesmtp 相似的错误。同样的解决方案在这里:https://dev59.com/jofca4cB1Zd3GeqPp_jq#29354086。 - Wes Modes
2
如果在重新安装bcrypt后仍无法正常工作,请通过运行“node-gyp -v”验证您的“node-gyp”是否是正确的版本,如果过时,请运行“npm update node-gyp -g”,然后重新安装bcrypt。 - Owen Allen
这对我在Meteor 1.2上有所帮助,现在我正在尝试部署一个Meteor 1.3应用程序,但目录结构已经改变了。 - Zach Smith
这个解决方案在我搜索了一段时间后确实起作用了。问题是只有 npm install bcrypt 貌似让它保留在之前的状态。只有删除该目录才能解决。 - culebrón

1

从Meteor 1.0.5开始(这也适用于即将推出的1.1),我们尚未对Node 0.12进行完整的测试、验证和QA流程。我建议在那个时间点之前坚持使用Node 0.10。虽然它可能大部分工作正常,但有可能需要进行一些核心更改,并且正如您所看到的,针对0.10 ABI构建的二进制软件包无法与0.12一起使用。


1
都是真的,但我们中的一些人在更新到 Meteor 的新版本时遇到了需要更新 node.js 的不愉快惊喜。然后,在我们更新时,我们遇到了这个问题。使用 nvm 回退到 node 10.x 仍然无法解决它(因为显然二进制文件已经改变)。因此需要一个解决方法。 - Wes Modes

0
重新从源代码构建bcrypt解决了我的问题。
npm rebuild bcrypt --build-from-source

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接