【问题标题】:Upgraded to ruby 1.9.2 and getting Segmentation Fault errors in nokogiri升级到 ruby​​ 1.9.2 并在 nokogiri 中出现分段错误错误
【发布时间】:2010-11-11 23:28:00
【问题描述】:

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

【问题讨论】:

    标签: ruby macos osx-snow-leopard segmentation-fault nokogiri


    【解决方案1】:

    如果您从 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 不是 rvm ruby​​ 版本: - 运行rvm list

    如果是,则将其删除:例如: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

    【讨论】:

    • 谢谢,这解决了我遇到的一些零星的段错误问题。我确实收到“警告:Nokogiri 是针对 LibXML 版本 2.7.3 构建的,但现在已动态加载 2.7.7”。
    • brew 中的 libxslt 似乎运行良好,并且可以从源代码编译。我建议将步骤 4 编辑为 brew install libxslt
    【解决方案2】:

    我猜你只需要告诉 rvm 使用正确的 ruby​​。

    rvm 1.9.2
    

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

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

    【讨论】:

    • 谢谢,但之前已经完成了所有这些。我在终端中将 rvm 设置为默认值 1.9.2 并测试了它是否已设置。我也不知道为什么提到 1.8.7。
    • 您的问题中没有足够的上下文来给出有意义的答案。你在运行什么命令?是不是马上就崩溃了?您是如何获得回溯的(我们能看到的很少)?
    • 谢谢,很抱歉缺少信息。我正在从 BBEdit 到终端运行一个 ruby​​ 脚本。一旦到达要求的“nokogiri”行,它就会立即失败。您在我的问题中看到的是终端屏幕中与错误相关的所有内容。
    • 你不能指望像 BBEdit 这样的进程来获取 rvm 的 ruby​​。 rvm 是特定于终端的,因为它会在您打开登录 shell 时设置您的环境变量。您需要告诉 BBEdit 在哪里可以找到 rvm 的当前 ruby​​。我已经好几年没有使用 BBEdit 了,但我确信它可怕的首选项对话框有一些方法可以设置 $PATH 等等。这可能会有所帮助,rvm.beginrescueend.com/integration/textmate
    • 只要脚本使用#!/usr/bin/env ruby,BBedit 的“在终端中运行”就可以正常运行 Ruby 脚本。我只是将puts RUBY_VERSION, %x{which ruby} 放入脚本并运行它并取回正确的路径和版本信息:/Users/greg/.rvm/rubies/ruby-1.9.2-p0/bin/ruby1.9.2。如果您使用Run... 菜单,它将使用系统Ruby。
    【解决方案3】:

    是否有可能您最初在 Leopard 上构建 Nokogiri,然后升级为 Snow Leopard?

    如果是这样,请执行 gem uninstall nokogiri 后跟 gem install nokogiri。这将强制它为您当前选择的 Ruby 和操作系统重新编译。

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

    【讨论】:

    • Thx 会尝试你永远不知道的,但在我搬到 Snow Leopard 之后,我肯定安装得很好。
    • 您还可以确认您的XCode 版本是最新的。我见过有关上一版本的 cmets。造成问题。根据 Apple 的 XCode 页面,当前版本为 3.2.4。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      这里的所有建议都对我不起作用,但下面 mmrobins 的删节 answer to this issue

      rvm gemset empty
      

      随后进行标准捆绑安装让一切都为我工作。

      【讨论】:

        猜你喜欢
        • 2015-12-14
        • 2021-02-26
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多