ruby - 通过 RVM 在 Ubuntu、Ruby 1.9.2 上安装使用 native 扩展的 gem 时出错

标签 ruby rubygems rake rvm ffi

我在尝试安装 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 `<main>'

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

我在安装带有 native 扩展的 gems 时经常遇到各种错误,所以我假设我的 Ubuntu 安装有问题,但我不知道是什么。我会发布您诊断问题所需的任何信息。

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

在 gem i 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 是其依赖项)时非常恼火。我最终浪费了太多时间,以至于我换了机器来解决这个问题。

事后,我发现了一个可行的 hack(尽管我确信有更好的解决方案)。错误信息提示的文件

~/.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 安装良好,包括那些需要 native 编译的 gem,因此问题是 FFI 特有的。

关于ruby - 通过 RVM 在 Ubuntu、Ruby 1.9.2 上安装使用 native 扩展的 gem 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127949/

相关文章:

ruby - 使用 "sudo gem update"的长期后果是什么?

ruby-on-rails - 如何在rails 7中使用format js?

ruby-on-rails - rake db::migrate 是如何工作的

javascript - HTML select 中所选项目发生更改时如何处理事件

ruby-on-rails - Basic rails - link_to 如何工作并将其替换为渲染

mysql - 安装 mysql2 gem

ruby-on-rails - bundle exec rake 测试:模型抛出 Errno::EACCES:权限被拒绝

ruby - 如何在 Ruby 脚本中为命令 shell 获取环境变量?

ruby-on-rails - 学习 RoR,有人可以从 H**ll 解释这个 boot.rb 吗?

ruby - 我不想将 "rake install"发布到 Rubygems