2015-12-01 108 views
2

我遇到了bcrypt gem问题。我跑了这一点:Gem已安装,但导轨服务器启动时失败

gem install bcrypt 

,并得到:

Fetching: bcrypt-3.1.10-x64-mingw32.gem (100%) 
Successfully installed bcrypt-3.1.10-x64-mingw32 
Parsing documentation for bcrypt-3.1.10-x64-mingw32 
Installing ri documentation for bcrypt-3.1.10-x64-mingw32 
Done installing documentation for bcrypt after 0 seconds 
1 gem installed 

我可以在列表中看到已安装的宝石:

bcrypt (3.1.10 x64-mingw32) 

当我开始的Rails:

rails server 

我得到了一个错误(我正在粘贴一个头文件以保持它的清洁):

C:/Ruby/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x64-mingw32/lib/bcrypt.rb:16:in `require': cannot load such file -- bcrypt_ext (LoadError) 

我使用Windows和Ruby 2.2。 DevKit已安装。设置环境变量:

  • PATHC:\Ruby\devkit\mingw\bin;C:\Ruby\devkit\bin
  • RI_DEVKITC:\Ruby\devkit

为了验证它,我跑:

make --version 

,并得到:

GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for i686-pc-msys 

这对我来说似乎很好。

Nokogiri会出现类似的问题。

出了什么问题?

回答

2

我做了一些研究,我已经有了一个答案:

gem install检测Ruby平台。然后,它会自动创建并最终看起来像这样的宝石的名称:

bcrypt-3.1.10-x64-mingw32 

这种宝石应该有这个特定平台预编译的版本,但是,对Ruby 2.2,没有编译bcrypt_ext。所以。 2.1是支持导致问题的最后一个版本。在这种情况下,有两种解决方案:

  1. 宝石只需要使用的devkit重新编译:

    gem install bcrypt --platform=ruby 
    

    这将编译源代码和创建所需的bcrypt_ext.so。

  2. 将Ruby降级到2.1。

对于Nokogiri同样的逻辑。

我希望它可以帮助别人。