Ruby on rails 如何防止管道字符在Rails 3/Ruby 1.9.2中导致错误的URI错误?
在我的应用程序中实现OAuth2时,我需要处理URI,如: 不确定这是Rails 3还是Ruby 1.9.2的问题(可能是URI.parse),但无论如何,WEBrick都会踢坏URIRuby on rails 如何防止管道字符在Rails 3/Ruby 1.9.2中导致错误的URI错误?,ruby-on-rails,ruby,uri,Ruby On Rails,Ruby,Uri,在我的应用程序中实现OAuth2时,我需要处理URI,如: 不确定这是Rails 3还是Ruby 1.9.2的问题(可能是URI.parse),但无论如何,WEBrick都会踢坏URI 有人知道解决办法吗?谢谢。我最后用瘦换了WEBrick,没有问题。我最近遇到了同样的需求(和问题)。在Rails3和Ruby1.9.2上 这对于我们的登台/生产环境(nginx)来说不是问题,但我有兴趣了解WEBrick的问题所在。事实证明,问题出在URI::Parser.split方法中,特别是它的模式匹配是
有人知道解决办法吗?谢谢。我最后用瘦换了WEBrick,没有问题。我最近遇到了同样的需求(和问题)。在Rails3和Ruby1.9.2上 这对于我们的登台/生产环境(nginx)来说不是问题,但我有兴趣了解WEBrick的问题所在。事实证明,问题出在URI::Parser.split方法中,特别是它的模式匹配是如何与URI::REGEXP::pattern常量一起播种的 您可以通过将以下内容添加到config/environments/development.rb来“修复”此问题(假设您只在dev.中使用WEBrick,或者您可以将其放在config/initializers文件中)
注意:这是设置:UNRESERVED=>“-!~*”()a-zA-Z\d |“初始值设定项工作正常,但我最终使用了URI.escape,因为它看起来更干净,似乎可以处理更多的情况
URI.join(origin_url, URI.escape(parsed_link)).to_s
加上这段代码似乎并不正确
# I need this because URI.join in crawler.rb bombs with '|' symbols
old_verbose = $VERBOSE
$VERBOSE = nil
URI::DEFAULT_PARSER = URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + '|')
$VERBOSE = old_verbose
您可能需要修复标题中的打字错误……您是否已将
#coding:UTF-8
放在文件顶部?遗憾的是,1.9+对字符非常敏感。URI::Parser
===>name错误:未初始化的常量URI::Parser
。有什么想法吗?这就是Ruby1.8.7是的,1.8中的URI是非常不同的,而且如果不重新编写URI模块的大块,就很难进行修补。如果您有这个问题,最好的办法是升级到1.9或使用WebRick以外的其他工具。这是一个非常好的解决方案。我遇到的一个问题是,即使你转义了URL,一些网站(如yahoo)也会将你转发到一个带有未转义字符(!)的URL,OpenURI不断崩溃。谢谢
# I need this because URI.join in crawler.rb bombs with '|' symbols
old_verbose = $VERBOSE
$VERBOSE = nil
URI::DEFAULT_PARSER = URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + '|')
$VERBOSE = old_verbose