运行黄瓜规格时,红宝石1.9.2奇怪的警告

时间:2010-09-01 21:50:31

标签: ruby ruby-on-rails-3 cucumber rvm

我刚刚更新了试用rails 3,使用rvm和ruby 1.9.2-p0。

当我运行黄瓜规格时,我会听到奇怪的警告

/home/ubuntu/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/utils.rb:16: warning: regexp match /.../n against to UTF-8 string

/home/ubuntu/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/utils.rb:16: warning: regexp match /.../n against to UTF-8 string

/home/ubuntu/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/utils.rb:16: warning: regexp match /.../n against to UTF-8 string

我的套装包含以下宝石......

Using rake (0.8.7) 
Using abstract (1.0.0) 
Using activesupport (3.0.0) 
Using builder (2.1.2) 
Using i18n (0.4.1) 
Using activemodel (3.0.0) 
Using erubis (2.6.6) 
Using rack (1.2.1) 
Using rack-mount (0.6.13) 
Using rack-test (0.5.4) 
Using tzinfo (0.3.23) 
Using actionpack (3.0.0) 
Using mime-types (1.16) 
Using polyglot (0.3.1) 
Using treetop (1.4.8) 
Using mail (2.2.5) 
Using actionmailer (3.0.0) 
Using arel (1.0.1) 
Using activerecord (3.0.0) 
Using activeresource (3.0.0) 
Using bundler (1.0.0) 
Using culerity (0.2.12) 
Using nokogiri (1.4.3.1) 
Using ffi (0.6.3) 
Using json_pure (1.4.6) 
Using rubyzip (0.9.4) 
Using selenium-webdriver (0.0.28) 
Using capybara (0.3.9) 
Using configuration (1.1.0) 
Using diff-lcs (1.1.2) 
Using trollop (1.16.2) 
Using gherkin (2.1.5) 
Using term-ansicolor (1.0.5) 
Using cucumber (0.8.5) 
Using cucumber-rails (0.3.2) 
Using database_cleaner (0.5.2) 
Using launchy (0.3.7) 
Using mysql2 (0.2.3) 
Using rspec-core (2.0.0.beta.20) 
Using rspec-expectations (2.0.0.beta.20) 
Using rspec-mocks (2.0.0.beta.20) 
Using rspec (2.0.0.beta.20) 
Using yard (0.6.0) 
Using pickle (0.4.2) 
Using thor (0.14.0) 
Using railties (3.0.0) 
Using rails (3.0.0) 
Using rspec-rails (2.0.0.beta.20) 
Using spork (0.8.4) 
Using webrat (0.7.1) 

有谁知道如何摆脱这些警告?他们来自哪里?

5 个答案:

答案 0 :(得分:19)

我在Enrico Stahn的博客文章中找到了一个很好的解决方案: http://blog.enricostahn.com/warning-regexp-match-n-against-to-utf-8-strin

问题出现在Rack中,并且在1.3.0中显然已经been fixed,但您可能无法升级到它。

因此,在您升级到Rack 1.3.0之前,请使用以下内容创建文件config/initializers/rack_hotfix.rb

# TODO: Can be removed after updating to rack 1.3.0
module Rack
  module Utils
    def escape(s)
      CGI.escape(s.to_s)
    end
    def unescape(s)
      CGI.unescape(s)
    end
  end
end

这对我来说很有魅力,然后我对我的RSpec文件进行了一项待测测试,作为一个温和的提醒,一旦Rack升级就放弃初始化器。

describe ApplicationController do
  ...
  it "should not include the rack_hotfix.rb initializer after upgrading to rack 1.3.0"

end

答案 1 :(得分:7)

请参阅:

https://github.com/jnicklas/capybara/issues/87https://github.com/jnicklas/capybara/issues/243

对该问题的一些讨论。分辨率似乎是Capybara和Rack都需要改变一些东西才能找到一个好的解决方案。

如果我理解正确,Rack 1.3和Capybara 1.0应该可以解决这个问题。目前,Rails 3.0.8仍然需要Rack~> 1.2.1,即使安装了Rack 1.3,也忽略Rack 1.3。所以我认为Rails(特别是actionpack)需要升级其依赖关系才能有一个干净的修复。

答案 2 :(得分:6)

将其添加到features/support中的文件或将其放入env.rb文件中:

# Stop endless errors like
# ~/.rvm/gems/ruby-1.9.2-p0@global/gems/rack-1.2.1/lib/rack/utils.rb:16: 
# warning: regexp match /.../n against to UTF-8 string
$VERBOSE = nil

这会抑制这些警告,但我不确定是什么原因导致了这些警告。我正在接受它们,也是

答案 3 :(得分:6)

有一个叫做“escape_utils”的宝石可以解决这个问题。以下是解释问题的文章的link

答案 4 :(得分:0)

也许您的脚本是用ASCII编码的,或者是UTF-8的不同格式?