2010-09-29 45 views
3

什么我迄今所做..Rails中3 Scrapi玩..越来越分段错误/中止陷阱

sudo gem install scrapi 

sudo gem install tidy 

这并没有工作,因为它没有足够的libtidy.dylib

所以我这样做:

sudo port install tidy 

sudo cp libtidy.dylib /Library/Ruby/Gems/1.8/gems/scrapi-1.2.0/lib/tidy/libtidy.dylib 

然后,我开始在下面简单railscast:http://media.railscasts.com/videos/173_screen_scraping_with_scrapi.mov

右后贝茨先生完成了第一个保存scrapitest.rb,我试图运行此代码:

require 'rubygems' 
require 'scrapi' 

scraper = Scraper.define do 
    process "title", :page_name => :text 
    result :page_name 
end 

uri = URI.parse("http://www.walmart.com/search/search-ng.do?search_query=lost+season+3&ic=48_0&search_constraint=0") 
p scraper.scrape(uri) 

有了这个代码:

ruby scrapitest.rb 

而且它返回此错误:

/Library/Ruby/Gems/1.8/gems/tidy-1.1.2/lib/tidy/tidybuf.rb:39: [BUG] Segmentation fault 
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0] 

Abort trap 

完全没有想法..

回答

2

我有这个问题,然后后续问题,一个seg故障会发生非确定性。

我跟着这里以下步骤: - http://rubyforge.org/tracker/index.php?func=detail&aid=10007&group_id=435&atid=1744

在整齐-1.1.2/LIB /整齐/ tidylib.rb:

1.此行添加到 '负载' 方法中Tidylib:

    extern "void tidyBufInit(void*)" 
2. Tidylib定义一个称为 'buf_init' 新方法:

    # tidyBufInit, using default allocator 
    # 
    def buf_init(buf) 
    tidyBufInit(buf) 
    end 

然后,在整齐-1.1.2/LIB /整齐/ tidybuf.rb:

3.此行添加到Tidybuf的下面的malloc初始化方法:

    Tidylib.buf_init(@struct) 

所以这是看起来像这样:


    # tidyBufInit, using default allocator 
    # 
    def buf_init(buf) 
    @struct = TidyBuffer.malloc 
    Tidylib.buf_init(@struct) 
    end 
4.为了完整,让布伦南的变化通过将分配领域的TidyBuffer结构,使它看起来像这样:

    TidyBuffer = struct [ 
    "TidyAllocator* allocator", 
    "byte* bp", 
    "uint size", 
    "uint allocated", 
    "uint next" 
    ] 
+0

优秀的后NatGordon。这真的很好地解决了这个问题。 – Trip 2011-01-03 17:11:39

1

如果你得到的错误: /opt/ruby/ruby-1.8.6/lib/ruby/gems/1.8/gems/tidy-1.1.2/lib/tidy/tidybuf.rb:40:[BUG]分割错误

这是因为数据类型不匹配在最新的Tidy(0.99)(/usr/include/buffio.h - $ Date:2007/01/23 11:17:45 $)

解决方法是修补tidybuf .rb:

--- tidybuf.rb 2007-04-10 09:09:01.000000000 -0500 
+++ tidybuf.rb.patched 2007-04-10 09:08:55.000000000 -0500 
@@ -11,6 +11,7 @@ 
    # Mimic TidyBuffer. 
    # 
    TidyBuffer = struct [ 
+ "int* allocator", 
    "byte* bp", 
    "uint size", 
    "uint allocated",