【问题标题】:Why won't the bcrypt ruby gem install properly?为什么 bcrypt ruby​​ gem 不能正确安装?
【发布时间】:2013-09-23 20:34:11
【问题描述】:

我正在尝试加入 bcrypt-ruby,v. 3.0.1。我在我的 gem 文件中输入 gem 如下:

gem 'bcrypt-ruby', '3.0.1'

然后我去终端运行:

bundle install

我收到以下回复:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby extconf.rb 
creating Makefile

make
compiling bcrypt_ext.c
make: gcc-4.2: No such file or directory
make: *** [bcrypt_ext.o] Error 1


Gem files will remain installed in /Users/philip7899/.bundler/tmp/2186/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /Users/philip7899/.bundler/tmp/2186/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
An error occurred while installing bcrypt-ruby (3.0.1), and Bundler cannot continue.
Make sure that `gem install bcrypt-ruby -v '3.0.1'` succeeds before bundling.

我对 Ruby 和 Rails 都非常陌生,不知道如何解决这个问题。我看过其他有类似问题的 stackoverflow 页面,但没有一个能够帮助我。我最近升级到 Mountain Lion,并被告知这可能是一个问题。有人告诉我使用 RVM 卸载然后重新安装 Ruby。我试过了,还是不行。

请帮忙。谢谢。

【问题讨论】:

标签: ruby-on-rails gem bundler bcrypt bcrypt-ruby


【解决方案1】:

在最近的版本中,bcrypt-ruby 似乎使用了 GMP 库。

所以,在 Linux 上,这样的东西应该会有所帮助(Ubuntu 14.04 的命令):

sudo aptitude install libgmp-dev

【讨论】:

  • 感谢@Envek,您为我节省了大量时间。
【解决方案2】:

尝试删除,'3.0.1' 或尝试像这样gem "bcrypt", "~> 3.1.1"

希望对你有帮助。

如果没有,从控制台尝试运行gem install bcrypt

【讨论】:

  • 那我可以转发你here.
  • 您的答案加上您发送给我的链接(我之前尝试过)的组合有效!谢谢!
  • 看起来 bcrypt-ruby 已重命名为 bcrypt: github.com/codahale/bcrypt-ruby#how-to-install-bcrypt。所以:gem "bcrypt", "~> 3.1.1".
  • @Adobe 谢谢!更新了答案
【解决方案3】:

其实很简单:

gem install bundler
gem install bcrypt-ruby

然后:

bundle update bcrypt-ruby
or bundle update bcrypt

会成功的。

这与升级铁轨的方式大致相同。如果您想确保还可以在 Gemfile 中指定最新的 bcrypt-ruby。我十分钟前才这样做,所以我知道它在这篇文章的日期有效......我使用的是 ruby​​ 1.9.3 p484

【讨论】:

  • gem install bundler 为我工作。谢谢! @神秘可乐
【解决方案4】:

我认为这是xcode升级的问题。

我的解决方案:

brew install apple-gcc42
sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2

它可以工作

【讨论】:

    【解决方案5】:

    我设法解决了安装失败的 Bcrypt 3.1.11 gem 的问题:

    linking shared-object bcrypt_ext.bundle
    ld: library not found for -lgmp
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [bcrypt_ext.bundle] Error 1
    
    make failed, exit code 2
    
    Gem files will remain installed in /Users/adrian/.rvm/gems/ruby-2.1.6/gems/bcrypt-3.1.11 for inspection.
    Results logged to /Users/adrian/.rvm/gems/ruby-2.1.6/extensions/x86_64-darwin-14/2.1.0/bcrypt-3.1.11/gem_make.out
    

    问题是找不到libgmp。首先,通过 brew 安装它:

    brew install gmp
    

    接下来,通过设置 LIBRARY_PATH 环境变量确保 gcc 能够找到库:

    export LIBRARY_PATH=/usr/local/lib
    

    然后安装:

    gem install bcrypt
    

    【讨论】:

    • 我已经尝试了很多方法来让它成功。导出库路径为我解决了这个问题。谢谢!
    【解决方案6】:

    您需要在 Ubuntu/Debian 上运行以下命令:

    sudo apt install ruby-dev
    

    【讨论】:

      【解决方案7】:
      1. 将所需的 gem 添加到 Gemfile 中
      2. 如果捆绑安装的远程路径包含空格,请将此行添加到您的配置文件中: .bundle\config:

      BUNDLE_LOCAL__BCRYPT:C:\RailsInstaller\Ruby2.1.0\lib\ruby\gems\2.1.0\gems\bcrypt-3.1.10\lib

      1. 运行捆绑安装

      【讨论】:

        【解决方案8】:

        这是对我有用的简单解决方案:

        在 mac 上测试:

        确保 gem 'bcrypt', '3.1.11' 在您的 gemfile 中,然后运行 ​​xcode-select --install。 运行bundle install

        就是这样。

        祝你好运

        【讨论】:

          【解决方案9】:

          带有用 C 语言编写的扩展的 Gem,如 bcrypt,不会总是在不同的平台/ruby 版本上编译。您可以寻找 bcrypt 的纯 ruby​​ 替代品,并完全避免 C 扩展可能出现的问题。您也可以尝试不同版本的 gem,看看它是否可以在您的系统上编译。

          【讨论】:

          • 谢谢,不过我需要使用这个版本,因为我的教程(我正在读的大书)使用了这个版本,而且我还不够先进,无法离开书本。
          • 您使用的是什么操作系统?在类 Unix 操作系统上使用 MRI 进行 C 扩展时,我获得了最好的结果。
          • 我正在使用 OSX Mountain Lion
          猜你喜欢
          • 2011-09-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-30
          • 2018-12-12
          • 1970-01-01
          • 2013-11-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多