Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过RVM在Ubuntu、Ruby 1.9.2上安装使用本机扩展的gems时出错_Ruby_Rubygems_Rake_Rvm_Ffi - Fatal编程技术网

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

通过RVM在Ubuntu、Ruby 1.9.2上安装使用本机扩展的gems时出错,ruby,rubygems,rake,rvm,ffi,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 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
更新:

这些是我的rake Gemspec:

~ - 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的外观,但是gempec与第一个不同,并且不包括可执行文件。不过,复制长文件并不能完全解决问题-我得到了一个未找到的rake可执行文件的文件。

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

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

您需要安装rakegem:
gem安装rake

我也遇到了类似的问题,在上的一个解决方法帮助了我。 简而言之,请尝试使用以下工具安装gem:
$rake=/usr/bin/rake gem install ffi

在波士顿黑客日,当我试图安装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安装(这可能是问题的一部分),Ruby 1.9.2使用RVM安装。许多其他gem安装得很好,包括那些需要本机编译的gem,因此问题是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。你找到解决方案了吗?我在使用ruby-1.9.2-p180时遇到了完全相同的错误。是的,rake是由rvm安装的。不,仍然不知道发生了什么,不是很紧急,但我想让rbprofile运行。谢谢!有一天,我想弄清楚潜在的问题是什么,但这浪费了我太多的时间。在我的案例中也起了作用。谢谢。在看到Docuunet的评论之前,我做了Docuunet做的事情。真有魅力!很高兴听到它起作用了。谢谢你的建议。我编辑了代码片段,使其更具通用性(我只是快速而懒惰地剪切/粘贴其中的内容)。
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)