Gem已安装,但在rails服务器启动时失败



我的bcrypt 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

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

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已安装。设置环境变量:

  • PATH:C:Rubydevkitmingwbin;C:Rubydevkitbin
  • RI_DEVKIT:C:Rubydevkit

为了验证它,我运行了:

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也出现了类似的问题。

怎么了?

我做了一些研究,得到了答案:

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

bcrypt-3.1.10-x64-mingw32

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

  1. gem只需要使用DevKit重新编译:

    gem install bcrypt --platform=ruby
    

    它将编译源代码并创建所需的bcrypt_ext.so.

  2. 将Ruby降级至2.1。

同样的逻辑也适用于野村。

我希望它能帮助到别人。

最新更新