Ошибка установки гемов, которые используют собственные расширения в Ubuntu, Ruby 1.9.2 через RVM - PullRequest
13 голосов
/ 26 февраля 2011

Я получаю сообщение об ошибке при попытке установить гем ffi:

~ - 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

При установке гемов с собственными расширениями я получаю частые ошибки всех типов, поэтому я предполагаю, что что-то не так с моей Ubuntuустановка, но я понятия не имею, что.Я опубликую любую информацию, необходимую для диагностики проблемы.

РЕДАКТИРОВАТЬ: Когда я перехожу к ffi gem (упомянутому во второй, но последней строке), и запускаю грабли в строке 6, я получаю "Не удалось найти ray-компилятор RubyGem ".

После того, как 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...]

Обновление:

Этомои грабли 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.

Ответы [ 5 ]

13 голосов
/ 01 марта 2011

Это вызвало у меня массу обострений в день взлома в Бостоне, когда я пытался установить 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.Многие другие гемы установлены нормально, в том числе те, которые требуют собственной компиляции, поэтому проблема связана с FFI.

6 голосов
/ 28 февраля 2011

У меня была похожая проблема, и мне помог обходной путь на http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529663. Короче, попробуйте установить гем с: $ rake=/usr/bin/rake gem install ffi

3 голосов
/ 10 апреля 2011

@ Том Моррис - Опробовал ваш метод, и он работал нормально.

Я вставил ваши спецификации пути (изменено - см. Ниже) в ~ / .rvm / gems / ruby-1.9.2-p180 / bin / rake после строки 12.

Я изменил спецификации пути, чтобы они были общими, используя ~ для домашнего пользователя:

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']

Спасибо, что нашли это исправление!

2 голосов
/ 12 апреля 2011

Спасибо @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)
0 голосов
/ 26 февраля 2011

Программа установки пытается запустить грабли, но не может быть найдена:

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

Вам необходимо установить гем rake: gem install rake.

...