Я получаю сообщение об ошибке на jruby (linux) при установке драгоценного камня «trinidad_diagnostics_extension» (хотя этот вопрос не о тринидаде). Цепочка зависимостей генерирует ошибку:
- «trinidad_diagnostics_extension» зависит от «jruby-lint >= 0.3.0»
- "jruby-lint >= 0.3.0", в свою очередь, зависит от "nokogiri >= 1.5.0.beta.4"
- Перед попыткой установить «trinidad_diagnostics_extension» соответствующая часть моего списка драгоценных камней выглядит так:
$gem list nokogiri (1.5.9 java) jruby-lint (0.4.1)
Как видите, необходимые зависимости, кажется, уже выполнены. Тем не менее, после добавления gem 'trinidad_diagnostics_extension'
в мой Gemfile и последующего запуска jruby -S bundle install
упаковщик пытается установить nokogiri
(1.6.0.rc1)
, и во время этой установки происходит сбой со следующей ошибкой:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
... bunch of omitted output here
nokogiri.c:42:18: fatal error: util.h: No such file or directory
compilation terminated.
make: *** [nokogiri.o] Error 1
Gem files will remain installed in /home/jg/.rvm/gems/jruby-1.7.3/gems/nokogiri-1.6.0.rc1 for inspection.
Results logged to /home/jg/.rvm/gems/jruby-1.7.3/gems/nokogiri-1.6.0.rc1/ext/nokogiri/gem_make.out
- Почему упаковщик пытается установить nokogiri, когда эта зависимость уже соблюдена?
- Как я могу это исправить? Успешная установка nokogiri 1.6 или информирование расширения trinidad о том, что 1.6 не нужно устанавливать, будут хорошим решением.
Если это актуально, у меня есть JRUBY_OPTS=-Xcext.enabled=true
ОБНОВИТЬ
Я смог заставить его работать, сначала установив драгоценный камень вне сборщика:
jruby -S gem install trinidad_diagnostics_extension
И тогда команда пакета работала нормально, так как она уже была установлена. Итак, я заставил его работать, я все еще не понимаю, почему мне пришлось устанавливать его вне бандлера и почему это имеет значение, и мне хотелось бы получить некоторое представление, если у кого-то оно есть.
1.5.9 java
— необычный номер версии. Возможно, Bundler неправильно анализирует его и поэтому не знает, что он удовлетворяет указанной зависимости. - person Mark Thomas   schedule 03.05.2013