`
RednaxelaFX
  • 浏览: 3048141 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

在Ruby 1.9.1/Windows 7上用mechanize遭遇segfault

    博客分类:
  • Ruby
阅读更多
之前用Mechanize写了点小脚本,不过有些网页跳转啊什么的明明可以并行做,Ruby 1.9之前却会因为green thread不是原生线程而无法真的并行,比较郁闷。想换到Ruby 1.9.1用NeverBlock来看看情况会不会好一些,不过却遇到了问题。

Ruby-mswin32抓得Ruby 1.9.1的stable release。运行机器是我那装着Windows 7 Beta的老本。

刚开始运行gem的时候总是会抱怨找不到zlib.dll,只好从前面装的Ruby 1.8.6的bin目录把zlib1.dll拷贝过去,重命名为zlib.dll。然后gem install基本上都顺利。

但是require 'mechanize'的时候却得到了segfault……
E:\ruby191\bin>gem install mechanize
Successfully installed nokogiri-1.1.1-x86-mswin32-60
Successfully installed mechanize-0.9.0
2 gems installed
Installing ri documentation for nokogiri-1.1.1-x86-mswin32-60...
Installing ri documentation for mechanize-0.9.0...
Updating class cache with 1261 classes...
Installing RDoc documentation for nokogiri-1.1.1-x86-mswin32-60...
Installing RDoc documentation for mechanize-0.9.0...

E:\ruby191\bin>gem install rubyscript2exe
Successfully installed rubyscript2exe-0.5.3
1 gem installed
Updating class cache with 1361 classes...

E:\ruby191\bin>gem install hpricot
Successfully installed hpricot-0.6.164-x86-mswin32
1 gem installed
Installing ri documentation for hpricot-0.6.164-x86-mswin32...
Installing RDoc documentation for hpricot-0.6.164-x86-mswin32...

E:\ruby191\bin>irb
irb(main):001:0> require 'uri'
=> true
irb(main):002:0> require 'mechanize'
E:/ruby191/lib/ruby/gems/1.9.1/gems/nokogiri-1.1.1-x86-mswin32-60/ext/nokogiri/native.so: [BUG] Segmentation fault
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]

-- control frame ----------
c:0034 p:-8950286 s:0112 b:0112 l:000111 d:000111 TOP
c:0033 p:---- s:0110 b:0110 l:000109 d:000109 CFUNC  :require
c:0032 p:0222 s:0106 b:0106 l:000105 d:000105 TOP    E:/ruby191/lib/ruby/gems/1.9.1/gems/nokogiri-1.1.1-x86-mswin32-60/lib/nokogiri.rb:15
c:0031 p:---- s:0104 b:0104 l:000103 d:000103 FINISH
c:0030 p:---- s:0102 b:0102 l:000101 d:000101 CFUNC  :require
c:0029 p:0107 s:0098 b:0098 l:000097 d:000097 TOP    E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/www/mechanize.rb:9
c:0028 p:---- s:0096 b:0096 l:000095 d:000095 FINISH
c:0027 p:---- s:0094 b:0094 l:000093 d:000093 CFUNC  :require
c:0026 p:0011 s:0090 b:0090 l:000089 d:000089 TOP    E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/mechanize.rb:7
c:0025 p:---- s:0088 b:0088 l:000087 d:000087 FINISH
c:0024 p:---- s:0086 b:0086 l:000085 d:000085 CFUNC  :require
c:0023 p:0011 s:0082 b:0082 l:0020ec d:000d3c EVAL   (irb):2
c:0022 p:---- s:0080 b:0080 l:000079 d:000079 FINISH
c:0021 p:---- s:0078 b:0078 l:000077 d:000077 CFUNC  :eval
c:0020 p:0027 s:0071 b:0071 l:000070 d:000070 METHOD E:/ruby191/lib/ruby/1.9.1/irb/workspace.rb:80
c:0019 p:0031 s:0064 b:0063 l:000062 d:000062 METHOD E:/ruby191/lib/ruby/1.9.1/irb/context.rb:218
c:0018 p:0030 s:0058 b:0058 l:0018b4 d:000057 BLOCK  E:/ruby191/lib/ruby/1.9.1/irb.rb:149
c:0017 p:0037 s:0050 b:0050 l:000049 d:000049 METHOD E:/ruby191/lib/ruby/1.9.1/irb.rb:263
c:0016 p:0011 s:0045 b:0045 l:0018b4 d:000044 BLOCK  E:/ruby191/lib/ruby/1.9.1/irb.rb:146
c:0015 p:0132 s:0041 b:0041 l:000024 d:000040 BLOCK  E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:244
c:0014 p:---- s:0038 b:0038 l:000037 d:000037 FINISH
c:0013 p:---- s:0036 b:0036 l:000035 d:000035 CFUNC  :loop
c:0012 p:0009 s:0033 b:0033 l:000024 d:000032 BLOCK  E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:230
c:0011 p:---- s:0031 b:0031 l:000030 d:000030 FINISH
c:0010 p:---- s:0029 b:0029 l:000028 d:000028 CFUNC  :catch
c:0009 p:0023 s:0025 b:0025 l:000024 d:000024 METHOD E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:229
c:0008 p:0042 s:0022 b:0022 l:0018b4 d:0018b4 METHOD E:/ruby191/lib/ruby/1.9.1/irb.rb:145
c:0007 p:0011 s:0019 b:0019 l:001824 d:000018 BLOCK  E:/ruby191/lib/ruby/1.9.1/irb.rb:69
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC  :catch
c:0004 p:0172 s:0011 b:0011 l:001824 d:001824 METHOD E:/ruby191/lib/ruby/1.9.1/irb.rb:68
c:0003 p:0039 s:0006 b:0006 l:0000f4 d:00248c EVAL   E:/ruby191/bin/irb.bat:20
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0000f4 d:0000f4 TOP
----------------------------- Ruby level backtrace information-----------------------------------------
E:/ruby191/lib/ruby/gems/1.9.1/gems/nokogiri-1.1.1-x86-mswin32-60/lib/nokogiri.rb:15:in `require'
E:/ruby191/lib/ruby/gems/1.9.1/gems/nokogiri-1.1.1-x86-mswin32-60/lib/nokogiri.rb:15:in `<top (required)>'
E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/www/mechanize.rb:9:in `require'
E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/www/mechanize.rb:9:in `<top (required)>'
E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/mechanize.rb:7:in `require'
E:/ruby191/lib/ruby/gems/1.9.1/gems/mechanize-0.9.0/lib/mechanize.rb:7:in `<top(required)>'
(irb):2:in `require'
(irb):2:in `irb_binding'
E:/ruby191/lib/ruby/1.9.1/irb/workspace.rb:80:in `eval'
E:/ruby191/lib/ruby/1.9.1/irb/workspace.rb:80:in `evaluate'
E:/ruby191/lib/ruby/1.9.1/irb/context.rb:218:in `evaluate'
E:/ruby191/lib/ruby/1.9.1/irb.rb:149:in `block (2 levels) in eval_input'
E:/ruby191/lib/ruby/1.9.1/irb.rb:263:in `signal_status'
E:/ruby191/lib/ruby/1.9.1/irb.rb:146:in `block in eval_input'
E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:244:in `block (2 levels) in each_top_level_statement'
E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `loop'
E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:230:in `block in each_top_level_statement'
E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `catch'
E:/ruby191/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `each_top_level_statement'
E:/ruby191/lib/ruby/1.9.1/irb.rb:145:in `eval_input'
E:/ruby191/lib/ruby/1.9.1/irb.rb:69:in `block in start'
E:/ruby191/lib/ruby/1.9.1/irb.rb:68:in `catch'
E:/ruby191/lib/ruby/1.9.1/irb.rb:68:in `start'
E:/ruby191/bin/irb.bat:20:in `<main>'

[NOTE]
You may encounter a bug of Ruby interpreter. Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

然后再试了试,发现require 'hpricot'也会在一个.so文件发生segfault。或许是Ruby 1.9.1与Windows 7 Beta的兼容性问题……

不知道这个问题跟之前别人遇到的在Windows 7 Beta上运行git遇到segfault的问题是不是一样的。是的话或许用Vista的msvcrt放在Ruby 1.9.1的bin目录里就能解决问题。回头试试看……

================================================================

啊,在Windows 7 Beta上用JRuby 1.1.6/JRE 1.6.0u11来运行mechanize也是不行。看起来是JRuby 1.1.6与Nokogiri相性不好……
irb(main):017:0> page = agent.get 'http://www.google.com/'
NoMethodError: undefined method `read_memory' for Nokogiri::HTML::Document:Class
        from E:/jruby-1.1.6/lib/ruby/gems/1.8/gems/nokogiri-1.1.1-java/lib/nokogiri/html.rb:36:in `parse'
        from E:/jruby-1.1.6/lib/ruby/gems/1.8/gems/mechanize-0.9.0/lib/www/mechanize/page.rb:46:in `parser'
        from E:/jruby-1.1.6/lib/ruby/gems/1.8/gems/mechanize-0.9.0/lib/www/mechanize/page.rb:105:in `meta'
        from E:/jruby-1.1.6/lib/ruby/gems/1.8/gems/mechanize-0.9.0/lib/www/mechanize.rb:499:in `fetch_page'
        from E:/jruby-1.1.6/lib/ruby/gems/1.8/gems/mechanize-0.9.0/lib/www/mechanize.rb:224:in `get'
        from (irb):18
分享到:
评论
10 楼 RednaxelaFX 2009-05-20  
嗯……所以我才一直懒得自己编译nokogiri的 TvT
而且我也不太喜欢进Cygwin……好吧我回头也用Cygwin试试
9 楼 night_stalker 2009-05-20  
RednaxelaFX 写道

night_stalker 写道刚才 1.9 上试了 mechanize,用上 libxml2 和 libxslt 的头文件和 lib,编译过去鸟。
我之前遇到segfault的是nokogiri而不是mechanize吧?你有顺带编译nokogiri么?有的话拜托传我.so吧 T T


嗯,我是在 cygwin 编译的 ,两个 lib 安装很舒服。后来也爬了些网页,没出问题。

但是 cygwin 外面的话…… libxml2 还好说,至少给了 msvc 的编译方式,但 libxslt 只看见 rpm 包的下载……
8 楼 RednaxelaFX 2009-05-20  
night_stalker 写道
刚才 1.9 上试了 mechanize,用上 libxml2 和 libxslt 的头文件和 lib,编译过去鸟。

我之前遇到segfault的是nokogiri而不是mechanize吧?你有顺带编译nokogiri么?有的话拜托传我.so吧 T T
7 楼 night_stalker 2009-05-20  
刚才 1.9 上试了 mechanize,用上 libxml2 和 libxslt 的头文件和 lib,编译过去鸟。
6 楼 RednaxelaFX 2009-04-17  
话说刚才在同学那边做实验,用了个折中的办法来在JRuby上用Mechanize。
老的Mechanize还是用Hpricot的,而0.6.x系列的Hpricot有Java版,所以两者都换回老一些的版本就能凑合用。

刚才在同学那边用的是:
Mechanize 0.8.5
Hpricot 0.6.161-Java
在JRuby 1.2.0里稍微试了下,都能行 T T
5 楼 oCameLo 2009-04-09  
检查一下native.so等文件链的是哪个版本的Ruby?在1.9里require了1.8的so,就会出Segmentation fault。
4 楼 RednaxelaFX 2009-03-04  
呃……看来只有等了。在Ruby的Issue tracking system上的这个bug被分类为third party issue了 T T
3 楼 idol 2009-03-02  
Ruby 1.9.1跟Mechanize的兼容性问题
2 楼 RednaxelaFX 2009-02-27  
idol 写道
碰到同样的问题,有解决方案么

是哪部分一样?Ruby 1.9.1还是JRuby 1.1.6还是Win7?Win7的话请试试看把Vista下的Windows\System32里的C运行时文件复制到Win7这边的Ruby的bin目录里试试。如果是Ruby 1.9.1跟Mechanize的兼容性问题的话我还不清楚……

我在Win7上遇到的问题暂时没找到解决的办法。最近在忙些别的事,Ruby这边有点放下了……呃,尽快看看能不能找到办法解决吧 T T
1 楼 idol 2009-02-27  
碰到同样的问题,有解决方案么

相关推荐

    Ruby1.9.1released.zip

    ruby 1.9.1 的下载地址是:ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.gz (windows上在http://www.ruby-lang.org/en/downloads/ 下载二进制的文件)另外,目前Rails 2.2还无法在ruby 1.9.1上面正常...

    【工作点滴】用VS 2010 编译 Ruby 1.9.1

    标题“【工作点滴】用VS 2010 编译 Ruby 1.9.1”涉及的是在Visual Studio 2010环境下编译Ruby编程语言的1.9.1版本。这是一个关于软件开发过程中的实践操作,尤其是针对Windows平台上的C/C++开发。在Windows上编译...

    适合Ruby 1.9.1的Ruby-FCGI源码包

    总的来说,这个特定的Ruby-FCGI源码包是为了解决在Ruby 1.9.1上的兼容性问题,让你能够在该版本的Ruby环境中顺利地开发和运行FastCGI应用。通过深入理解FastCGI协议、Ruby C扩展以及Ruby 1.9.1的特性,你可以充分...

    ruby1.9.1文档和一本pdf

    7. **案例研究**:通过实际项目示例展示如何在 Ruby 1.9.1 中应用新特性,解决实际问题。 8. **升级指南**:对于从旧版本升级到 1.9.1 的开发者,提供注意事项和迁移策略。 阅读这份文档和 PDF,不仅可以帮助你...

    windows下安装Ruby 1.9 二进制zip包

    下面,我们将详细讨论如何通过二进制zip包在Windows上安装Ruby 1.9。 首先,你需要下载Ruby 1.9的Windows二进制zip包,可以从Ruby官方网站或者第三方可靠的下载站点获取。这个zip包通常包含了Ruby解释器以及必要的...

    ruby-1.9.1-p0-i386-mswin32.zip

    "ruby-1.9.1-p0-i386-mswin32.zip" 是一个针对Windows操作系统编译的Ruby编程环境的压缩包,发布于2009年6月20日,当时是Ruby 1.9.1版本的最新版。 Ruby 1.9.1是一个重要的版本更新,引入了许多改进和新特性,包括...

    ruby安装升级及命令自行编译安装非APTGET方式安装升级的办法

    - 配置编译选项:在编译前需确保`/usr/local/ruby-1.9.1`文件夹有适当的权限。执行命令`../configure --prefix=/usr/local/ruby-1.9.1` **步骤三:编译与安装** - 编译源码:执行`make` - 安装编译后的文件:`make...

    jquery-1.9.1.js 、jquery-1.9.1.min.js 【官方jquery包 js】

    《jQuery 1.9.1:深入理解与应用》 jQuery,这个JavaScript库,自2006年发布以来,以其简洁的API和强大的功能,迅速成为开发者们首选的前端工具之一。本篇文章将深入探讨jQuery 1.9.1版本,包括其核心特性、性能...

    ruby-1.9.1-p0-i386-mswin32.rar

    总之,这个“ruby-1.9.1-p0-i386-mswin32.rar”压缩包提供了一个完整的Ruby环境,适合在Windows 32位系统上进行开发工作,特别是那些需要处理JSON数据的项目。随着Ruby的不断发展,它继续吸引着全球各地的开发者,...

    最新版windows consul_1.9.1_windows_amd64.zip

    在“最新版windows consul_1.9.1_windows_amd64.zip”中包含的“consul.exe”文件,是Consul的可执行程序,用于在Windows操作系统上启动和运行Consul服务。安装和运行Consul通常涉及以下步骤: 1. 解压下载的zip...

    jquery-1.9.1 压缩版+非压缩版

    jquery-1.9.1 压缩版+非压缩版,另附压缩版引用地址: 百度压缩版引用地址: &lt;script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt; 微软压缩版引用地址: &lt;script src="http://ajax.aspnetcdn....

    jquery.min.js 1.9.1

    jquery.min.js 1.9.1 兼容IE6

    golang 1.9.1 Windows安装包

    golang 1.9.1 Windows安装包。

    Ruby工具 windows 环境

    在Windows上编写Ruby脚本,可以使用任何文本编辑器,如Notepad++或Visual Studio Code,并保存文件为`.rb`扩展名。然后,你可以通过在命令行中输入`ruby [filename.rb]`来运行你的脚本。 在压缩包中的"说明_Readme....

    apache-ant-1.9.1-bin

    ant的配法: 1。...SET ANT_HOME=C:\apache-ant-1.9.1 //注意是Ant的安装目录,不是bin子目录 SET PATH=%PATH%;%ANT_HOME%\bin; 在cmd模式下输入 ant -version回车,看到输出说明即表示配置成功。

    neo4j-enterprise-1.9.1-windows.zip

    在“neo4j-enterprise-1.9.1-windows.zip”这个压缩包中,我们拥有了Neo4j企业版1.9.1在Windows平台上的完整安装包。官方提供确保了其可靠性和稳定性,是开发和部署基于图形数据应用程序的理想选择。 图形数据库是...

    ruby gem环境

    1. 安装Ruby解释器:在Windows上,你可以从Ruby官网下载适合你系统的Ruby安装包,安装过程中可以选择添加到系统路径,这样就可以在命令行中直接运行`ruby`和`gem`命令。 2. 更新Gem:安装Ruby后,应确保Gem是最新的...

    protoc-gen-grpc-java-1.9.1-windows-x86_64.exe

    protoc-gen-grpc-java-1.9.1-windows-x86_64.exe

    gitblit(1.8.0).zip

    1. `gitblit.war`:这是Gitblit的Web应用程序,可以部署到支持Java Servlet容器(如Tomcat)上运行。 2. `gitblit.jar`:Gitblit的可执行JAR文件,可以直接运行在Java环境中,无需Web服务器。 3. `conf`目录:包含...

Global site tag (gtag.js) - Google Analytics