Ошибка установки драгоценных камней, которые используют собственные расширения на 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
.