Обновлен до ruby 1.9.2 и получает ошибки Segmentation Fault в nokogiri
Я решил обновить до 1.9.2 ruby вчера, а также установил rvm для этого. Я запустил несколько последних файлов, над которыми работал ранее на 1.8.7, но все, что требует nokogiri, не работает со следующими ошибками.
/Users/myusername/.rvm/gems/ruby-1.9.2-p0/gems/nokogiri-1.4.3.1/lib/nokogiri/nokogiri.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
Я запускаю nokogiri 1.4.3.1, ruby 1.9.2 на OSX Snow Leopard 10.6.4
5 ответов
Если вы получили ошибку сбоя сегментации от nokogiri, например, когда вы открываете консоль rails, и вы используете RVM, и ваша версия ruby имеет версию 1.9.2 (моя в настоящее время 1.9.2p136), и вы заметили ссылку на ruby 1.8.7 сразу после сообщения об ошибке сегментации nokogiri, возможно, следующее может быть полезным...
ОШИБКА
$ rails c
/Users/lex/.rvm/gems/ruby-1.9.2-p136@lmi/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
Abort trap
РЕШЕНИЕ
(1) убедитесь, что ruby 1.8.7 не является версией ruv ruby:
- запустите rvm list
если это так, то удалите его: ex:
rvm uninstall ree-1.8.7-2010.02
(2) удалите зависимости, связанные с nokogiri и libxml2:
$ gem uninstall nokogiri
$ brew uninstall libxml2
(3) установить libxml2, используя homebrew
$ brew install libxml2
$ brew link libxml2
(4) установить libxslt из исходного кода
$ wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
$ tar -zxvf libxslt-1.1.26.tar.gz
$ cd libxslt-1.1.26
$ ./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.7
$ make
$ sudo make install
(5) установить nokogiri
gem install nokogiri
Альтернатива (убедитесь, что ваши пути верны): gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.7/include --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.7/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26
(6) тест
$ rails c
Loading development environment (Rails 3.0.3)
>>
Получение и поддержание правильной работы библиотек синтаксического анализа Ruby XML может стать проблемой. Вот несколько альтернатив: LibXML, Hpricot, REXML
Я предполагаю, что вам просто нужно сказать rvm
использовать правильный рубин.
rvm 1.9.2
В противном случае, почему ваша вторая строка указывает на 1.8.7?
Вы не должны ожидать, что нативный код, скомпилированный для одной основной версии ruby, будет чисто ссылаться на другую. Там нет контракта ABI, афаик.
Возможно ли, что вы изначально построили Nokogiri на Leopard, а затем повысили его до Snow Leopard?
Если так, сделайте gem uninstall nokogiri
с последующим gem install nokogiri
, Это заставит его перекомпилироваться для выбранных вами Ruby и ОС.
Я видел подобные проблемы, когда я обновил Leopard до Snow Leopard и переустановил свой Ruby. Драгоценные камни не перекомпилировались, поэтому мне пришлось заставить некоторых из них сделать это.
Все предложения здесь не работали для меня, но сокращенный ответ на этот вопрос mmrobins ниже:
rvm gemset empty
После установки стандартного комплекта все получилось у меня.
Попробуйте запустить rvm requirements
в терминале и посмотреть, есть ли какие-либо отсутствующие зависимости. (Это показывает красным цветом в моей OS X)
Возвращенные заметки помогли мне установить недостающие зависимости с помощью brew, с четко указанными шагами.