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

时间:2010-11-11 23:28:00

标签: ruby macos osx-snow-leopard 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]

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

5 个答案:

答案 0 :(得分:5)

如果你从nokogiri那里得到一个Segmentation fault错误,例如,当你打开rails控制台时,你正在使用RVM而你的ruby版本是1.9.2(我的目前是1.9.2p136)并且你注意到在nokogiri分段错误消息之后的红宝石1.8.7,那么也许以下可能是有帮助的......

ERROR

$ 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

答案 1 :(得分:4)

我猜你只需告诉rvm使用正确的红宝石。

rvm 1.9.2

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

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

答案 2 :(得分:2)

你有可能最初在Leopard上建造Nokogiri然后升级到Snow Leopard吗?

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

这里的所有建议对我来说都不起作用,但下面的mm {{p>缩略语answer to this issue

rvm gemset empty

然后是标准的捆绑安装,让一切都为我工作。