Подтвердить что ты не робот

Ruby 1.9.2 странное предупреждение при использовании спецификаций огурца

Я только что обновил, чтобы попробовать рельсы 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) 

Кто-нибудь знает, как избавиться от этих предупреждений? И откуда они идут?

4b9b3361

Ответ 1

Есть хорошее решение, доступное для этого, которое я нашел в блоге 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

Ответ 2

См:

https://github.com/jnicklas/capybara/issues/87 и https://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) потребуется обновить свою зависимость, чтобы иметь чистое исправление.

Ответ 3

Добавьте это в файл в features/support или поместите его в файл env.rb:

# Stop endless errors like
# ~/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/utils.rb:16: 
# warning: regexp match /.../n against to UTF-8 string
$VERBOSE = nil

Это будет подавлять эти предупреждения, хотя я не уверен, что их вызывает в первую очередь. Я получаю их, также

Ответ 5

Возможно, ваши скрипты закодированы в ASCII или в другом формате от UTF-8?