Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby 2升级会破坏Nokogiri和/或开放uri编码吗?_Ruby On Rails_Ruby_Nokogiri_Open Uri - Fatal编程技术网

Ruby on rails Ruby 2升级会破坏Nokogiri和/或开放uri编码吗?

Ruby on rails Ruby 2升级会破坏Nokogiri和/或开放uri编码吗?,ruby-on-rails,ruby,nokogiri,open-uri,Ruby On Rails,Ruby,Nokogiri,Open Uri,将Rails3.2 Ruby 1.9应用程序升级到Rails3.2 Ruby 2.1.2应用程序时,我有一个谜团要解开。Nokogiri似乎崩溃了,因为它使用开放uri改变了自己的行为。没有更改gem版本,只有ruby版本(这都是在OSX Mavericks上,使用brew、gcc4等) 复制步骤: $ ruby -v ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin13.1.0] $ rails console Connect

将Rails3.2 Ruby 1.9应用程序升级到Rails3.2 Ruby 2.1.2应用程序时,我有一个谜团要解开。Nokogiri似乎崩溃了,因为它使用开放uri改变了自己的行为。没有更改gem版本,只有ruby版本(这都是在OSX Mavericks上,使用brew、gcc4等)

复制步骤:

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin13.1.0]

$ rails console
Connecting to database specified by database.yml
Loading development environment (Rails 3.2.18)

> feed = Nokogiri::XML(open(URI.encode("http://anyblog.wordpress.org/feed/")))
=> #(Document:0x3fcb82f08448 {
  name = "document",
  children = [
  ..

> feed.xpath("//item").count
=> 10
太好了!接下来,在rvm更改为Ruby 2.1.2并进行捆绑安装之后

$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

$ rails console
Connecting to database specified by database.yml
Loading development environment (Rails 3.2.18)

> feed = Nokogiri::XML(open(URI.encode("http://anyblog.wordpress.org/feed/")))
=> 

> feed.inspect
=> "#<Nokogiri::XML::Document:0x86a1f21c name=\"document\">"

> feed.xpath("//item").count
=> 0
..1.9版本是可读的,即gzip已经应用


如果我使用一个干净的ruby irb,它就可以正常工作,所以我的rails gems中一定有什么东西正在将openURI open的行为更改为not deflate/gzip。我参考了很多宝石..:(

好的,这是一个答案,也许是答案。Ruby 2改变了它在HTTP请求和压缩/压缩中使用头的方式,但在某个时候,他们改变了主意,把它放回了1.9的工作方式。在此期间,一些Rails gem维护者对HTTP:Net进行了修补,使它们的gem在1.9和2.0上都能工作。这些修补程序仍然在运行gems的旧版本中存在ger,并导致类似我看到的从1.9升级到2.1的问题

此处总结了问题和解决方案:

我们使用gem right_aws,ruby版本的详细信息如下:

解决方案是在我们的gem文件中将此作为gem引用撤消monkey补丁:

gem 'right_http_connection', git: 'git://github.com/rightscale/right_http_connection.git', ref: '3359524d81'
背景阅读和更多信息:

gem 'right_http_connection', git: 'git://github.com/rightscale/right_http_connection.git', ref: '3359524d81'