升级到ruby 1.9.2并在nokogiri中获得Segmentation Fault错误

我决定昨天升级到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] 

我在OSX Snow Leopard 10.6.4上运行nokogiri 1.4.3.1,ruby 1.9.2

如果你从nokogiri那里得到一个Segmentation fault错误,例如,当你打开rails控制台,并且你正在使用RVM并且你的ruby版本是1.9.2(我当前是1.9.2p136)并且你注意到对ruby 1.8的引用。在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不是rvm ruby​​版本: – 运行rvm list

如果是,则删除它:ex: rvm uninstall ree-1.8.7-2010.02

(2)卸载nokogiri和libxml2相关的依赖项:

 $ gem uninstall nokogiri $ brew uninstall libxml2 

(3)使用自制软件安装libxml2

 $ 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使用正确的ruby。

 rvm 1.9.2 

否则你的第二行为什么会显示1.8.7?

你不应该期望针对一个主要版本的ruby编译的本机代码可以干净地链接到另一个版本。 afai没有ABI合同。

您是否有可能最初在Leopard上建造Nokogiri然后升级到Snow Leopard?

如果是这样,请执行gem uninstall nokogiri然后选择gem install nokogiri 。 这将迫使它重新编译您当前选择的Ruby和OS。

当我从Leopard升级到Snow Leopard并重新安装我的Ruby时,我看到了类似的问题。 gem没有被重新编译,所以我不得不强迫他们中的几个这样做。

尝试在终端中运行rvm requirements ,看看是否有任何缺少的依赖项。 (它在OS X中以红色显示)

返回的注释帮助我使用brew安装了缺少的依赖项,并明确说明了步骤。

这里的所有建议都不适合我,但下面的mmrobins 对这个问题的简要回答是 :

 rvm gemset empty 

接下来是一个标准的捆绑安装让一切都适合我。