对于具有本机扩展名的gem,无法修复“bundle install”失败

时间:2011-09-07 08:48:13

标签: ruby-on-rails-3 rubygems rvm bundler

我正在Amazon EC2云服务器上部署Ruby On Rails应用程序。该服务器在Amazon Linux alami-2011.02上运行。我不能说这是基于它的发行版(从我的搜索,RedHat / CentOS,但我是那个领域的新手)。

我已经使用RVM安装了我的Ruby环境(以root用户身份安装)。我已经设置了两个红宝石:

  • REE 1.8.7
  • Ruby 1.9.2-p290

对于我部署的每个Rails应用程序,我创建了一个单独的RVM gemset。

由于我遇到了这个问题,我通过运行rvm implode完全刷新了Ruby环境。

以下是我的环境版本:

ruby -v      ---> ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
rvm -v       ---> 1.8.1
gem -v       ---> 1.6.2
bundle -v    ---> Bundler version 1.0.18

此后rvm implode

  • 我再次安装了2件红宝石
  • 我为ree-1.8.7应用创建了一个gemset,并安装了所需的宝石 - >没问题
  • 我为ruby-1.9.2 app创建了一个gemset,并通过Bundle安装了gem - > 没问题,即使对于具有原生扩展名的宝石
  • 我为另一个ruby-1.9.2创建了一个gemset,试图通过Bundle安装宝石...... 这里又来了!

执行bundle install(以root身份登录)时,我知道这一点:

Updating https://github.com/p7r/will_paginate.git
Fetching source index for http://rubygems.org/
Installing rake (0.9.2) 
Installing multi_json (1.0.3) 
Installing activesupport (3.1.0) 
Installing bcrypt-ruby (3.0.0) with native extensions /usr/local/rvm/scripts/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:552:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

        /usr/local/rvm/scripts/rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb 

Gem files will remain installed in /usr/local/rvm/scripts/rvm/gems/ruby-1.9.2-p290@app/gems/bcrypt-ruby-3.0.0 for inspection.
Results logged to /usr/local/rvm/scripts/rvm/gems/ruby-1.9.2-p290@app/gems/bcrypt-ruby-3.0.0/ext/mri/gem_make.out

    [ removed the backtrace ]

但是,如果我只使用gem install bcrypt,宝石安装正确,我可以使用bundle install,这将运行到具有原生扩展的下一个宝石......

我遇到了与ruby-1.9.2-p180安装相同的问题,我尝试将RubyGems降级到不同的版本,直到1.5.3,我崩溃了我的RVM ...我在Web上看了很多答案,这个问题似乎反复出现,但对我来说没什么用。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

这可能是由于内存不足以编译本机扩展。根据我的经验,bundle install比仅使用gem install更省内存。看一下/var/log/messages,看看是否存在任何此类问题。此外,使用top来识别任何重量级进程,例如同事在屏幕会话中运行rails console。 ;)

答案 1 :(得分:1)

如果你在linux上运行,你需要在安装bcrypt-ruby gem之前安装库/包。

sudo apt-get install ruby1.8-dev //对于ruby 1.8.7

sudo apt-get install ruby-dev

sudo apt-get install ruby1.9-dev //对于ruby 1.9.2

现在您可以使用以下命令安装bcrypt-ruby gem

sudo gem install bcrypt-ruby