Ошибка установки драгоценных камней, которые используют собственные расширения на Ubuntu, Ruby 1.9.2 через RVM

При попытке установить 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

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

EDIT: Когда я подключился к ffi gem (указанному во второй, но последней строке) и запустил строку рейка в строке 6, я получаю "Не могу найти RubyGem rake-компилятор".

После gem я 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...]

Update:

Это мои 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/[email protected]/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.

Ответы

Ответ 1

Это вызвало у меня тяжесть обострения в день бостонского взлома при попытке установить бродягу (для которой 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/[email protected]'
ENV['PATH']='~/.rvm/gems/ruby-1.9.2-p180/bin:~/.rvm/gems/[email protected]/bin:~/.rvm/rubies/ruby-1.9.2-p180/bin:' + ENV['PATH']

Это исправило это для меня. Это была новая установка Ubuntu 10.10 без установки Ruby по умолчанию (которая может быть частью проблемы) и Ruby 1.9.2, установленного с использованием RVM. Многие другие драгоценные камни установлены отлично, включая те, которые требуют встроенной компиляции, поэтому проблема является чем-то специфичным для FFI.

Ответ 2

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

Ответ 3

@Tom Morris - Пробовал ваш метод, и он работал нормально.

Я ввел ваши спецификации пути (измененный - см. ниже) в ~/.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/[email protected]"
ENV['PATH']="~/.rvm/gems/ruby-1.9.2-p180/bin:~/.rvm/gems/[email protected]/bin:~/.rvm/rubies/ruby-1.9.2-p180/bin:"+ ENV['PATH']

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

Ответ 4

Спасибо @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/[email protected]"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'rake', version
load Gem.bin_path('rake', 'rake', version)

Ответ 5

Установщик пытается запустить rake, но не работает, когда он не найден:

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

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