24

我刚刚更新以尝试使用带有 ruby​​ 1.9.2-p0 的 rvm 的 rails 3。

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

/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) 

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

4

5 回答 5

19

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

问题出在 Rack 中,显然已经在 1.3.0中修复,但您可能还无法升级到它。

因此,在您可以升级到 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
于 2011-08-25T11:38:56.540 回答
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,即使您已经安装了它。所以我认为 Rails(特别是 actionpack)需要升级它的依赖才能有一个干净的修复。

于 2011-06-12T16:09:08.230 回答
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

这将抑制这些警告,尽管我不确定是什么首先导致它们。我也得到它们

于 2010-09-11T21:45:16.900 回答
6

有一个名为“escape_utils”的 gem 可以解决这个问题。这是解释问题的文章的链接。

于 2010-10-05T14:14:29.153 回答
0

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

于 2010-09-01T21:52:26.590 回答