通过RVM在Ubuntu,Ruby 1.9.2上安装使用本机扩展的gem时出错

我在尝试安装ffi gem时遇到错误:

~ - 16:54>gem i ffi Building native extensions. This could take a while... ERROR: Error installing ffi: ERROR: Failed to build gem native extension. rake RUBYARCHDIR=/home/mdemare/.rvm/gems/ruby-1.9.2-p136/gems/ffi-1.0.6/lib RUBYLIBDIR=/home/mdemare/.rvm/gems/ruby-1.9.2-p136/gems/ffi-1.0.6/lib /home/mdemare/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems.rb:370:in `bin_path': can't find gem rake ([">= 0"]) with executable rake (Gem::GemNotFoundException) from /home/mdemare/.rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `' Gem files will remain installed in /home/mdemare/.rvm/gems/ruby-1.9.2-p136/gems/ffi-1.0.6 for inspection. Results logged to /home/mdemare/.rvm/gems/ruby-1.9.2-p136/gems/ffi-1.0.6/gen/gem_make.out 

我在安装带有原生扩展的gem时会遇到各种各样的错误,所以我认为我的Ubuntu安装有些问题,但我不知道是什么。 我会发布您诊断问题所需的任何信息。

编辑:当我cd到ffi gem(在第二行但在最后一行中提到),并在第6行运行rake行时,我得到“找不到RubyGem rake-compiler”。

在我的rake-compiler之后,再次运行rake,我得到了这个:

 configure: error: source directory already configured; run "make distclean" there first make: *** [/home/mdemare/.rvm/gems/ruby-1.9.2-p136/gems/ffi-1.0.6/build/x86_64-linux/ffi_c/1.9.2/libffi/.libs/libffi_convenience.a] Error 1 rake aborted! Command failed with status (2): [make...] 

更新:

这些是我的rake gemspecs:

 ~ - 10:59>find ~/.rvm/ -name 'rake-0.8.7.gemspec' ~/.rvm/gems/ruby-1.9.2-p136/specifications/rake-0.8.7.gemspec ~/.rvm/gems/ruby-1.9.2-p136@global/specifications/rake-0.8.7.gemspec ~/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/gems/1.9.1/specifications/rake-0.8.7.gemspec 

最后一个是gem看起来的地方,但是gemspec与第一个不同,并且不包括可执行文件。 复制长文件并不能完全解决问题 – 我找到了一个找不到rake可执行文件的文件。

这使得我在波士顿黑客日试图安装Vagrant(FFI是一个依赖者)时大量恶化。 我最后浪费了那么多时间,我换了机器来解决这个问题。

事实上,我发现了一个有效的黑客(虽然我确信有更好的解决方案)。 错误消息抱怨的文件

 ~/.rvm/gems/ruby-1.9.2-p180/bin/rake 

与其他类似副本的不同之处在于它缺少了头部的路径设置,所以我从其中一个文件中复制了这些行:

[根据以下@ danv的答案进行通用化。 谢谢你的改进!]

 ENV['GEM_HOME']=ENV['GEM_HOME'] || '~/.rvm/gems/ruby-1.9.2-p180' ENV['GEM_PATH']=ENV['GEM_PATH'] || '~/.rvm/gems/ruby-1.9.2-p180:~/.rvm/gems/ruby-1.9.2-p180@global' ENV['PATH']='~/.rvm/gems/ruby-1.9.2-p180/bin:~/.rvm/gems/ruby-1.9.2-p180@global/bin:~/.rvm/rubies/ruby-1.9.2-p180/bin:' + ENV['PATH'] 

那为我修好了。 这是一个新的Ubuntu 10.10安装,没有默认的Ruby安装(这可能是问题的一部分)和使用RVM安装的Ruby 1.9.2。 许多其他gem安装得很好,包括那些需要本机编译的gem,所以这个问题是FFI特有的。

我有类似的问题, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529663的解决方法帮助了我。 简而言之,尝试使用以下命令安装gem: $ rake=/usr/bin/rake gem install ffi

@Tom Morris – 尝试了你的方法,它工作得很好。

我在第12行之后将你的路径规范(修改后 – 见下文)插入〜/ .rvm / gems / ruby​​-1.9.2-p180 / bin / rake。

我修改了路径规范,因此它们对于用户主页使用~是通用的:

 ENV['GEM_HOME']=ENV['GEM_HOME'] || "~/.rvm/gems/ruby-1.9.2-p180" ENV['GEM_PATH']=ENV['GEM_PATH'] || "~/.rvm/gems/ruby-1.9.2-p180:~/.rvm/gems/ruby-1.9.2-p180@global" ENV['PATH']="~/.rvm/gems/ruby-1.9.2-p180/bin:~/.rvm/gems/ruby-1.9.2-p180@global/bin:~/.rvm/rubies/ruby-1.9.2-p180/bin:"+ ENV['PATH'] 

感谢您找到此修复程序!

感谢@Tim Morris和@danv,您的回答/评论有所帮助。 我调整了我的设置,这更多地基于超级用户环境。 现在这就是/usr/local/rvm/gems/ruby-1.9.2-p180/bin/rake在我的服务器上的样子:

 require 'rubygems' version = ">= 0" ENV['GEM_HOME']=ENV['GEM_HOME'] || "/usr/local/rvm/gems/ruby-1.9.2-p180" ENV['GEM_PATH']=ENV['GEM_PATH'] || "/usr/local/rvm/gems/ruby-1.9.2-p180:/usr/local/rvm/gems/ruby-1.9.2-p180@global" if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then version = $1 ARGV.shift end gem 'rake', version load Gem.bin_path('rake', 'rake', version) 

安装程序尝试运行rake但在找不到时失败:

 can't find gem rake ([">= 0"]) with executable rake (Gem::GemNotFoundException) 

你需要安装rake gem: gem install rake