2010-09-01 81 views
24

我剛更新試試rails 3,使用rvm和ruby 1.9.2-p0。紅寶石1.9.2運行黃瓜規格時出現奇怪的警告

當我跑我的黃瓜規格然後我得到以下奇怪的警告

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

沒有人知道如何擺脫這些警告?他們來自哪裏?

+0

我有完全一樣的東西。我很想找出原因! – 2010-09-11 13:25:29

+1

你好 - 你會介意結算給出的最後答案:http://stackoverflow.com/questions/3622394/ruby-1-9-2-strange-warning-when-running-cucumber-specs/7189698# 7189698我相信它可以解決您的問題,並將不勝感激,如果你可以標記爲正確的。 Ty – 2011-09-12 11:30:26

回答

19

還有就是這一點,我在一篇博客文章由恩里科Stahn發現可很好的解決方案: http://blog.enricostahn.com/warning-regexp-match-n-against-to-utf-8-strin

的問題是在機架和顯然已經在1.3.0已經been fixed但你可能不能夠升級到它呢。

所以,直到你可以升級到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

謝謝!這對我很好。 – shakerlxxv 2011-09-11 03:22:57

+2

當使用Rails 3.0.10時,你不能升級到Rack 1.3+,所以這是一個竅門! 我個人不喜歡有待定測試,如果你像我一樣,你可以使用這些例子: 'it「應該包括機架1.3.0之前的rack_hotfix.rb初始化器」如果Rack.release.to_f <= 「 1.2 機架:: utils的:: hotfixed.should be_true 結束 結束 它 「不應該包括機架1.3.0後rack_hotfix.rb初始化」 做 如果Rack.release.to_f> = 1.3 期待{機架: :Utils.hotfixed} .to raise_error end end' 只需將此行添加到修補程序:'def self.hotfixed true end' – rchampourlier 2012-01-20 15:18:37

0

也許你的腳本是用ASCII或者UTF-8格式編碼的?

+0

這是什麼意思?你能提供一些細節嗎?是我的編輯器需要將文件視爲UTF-8嗎?因爲警告來自機架,據我猜測... – 2010-09-02 07:24:20

6

這個添加到文件中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 

這將抑制這些警告,但我不知道是什麼原因造成他們在首位。我得到他們,也

6

有一個名爲「escape_utils」的寶石照顧這個問題。以下是解釋問題的文章link

+4

我不想添加寶石和模塊,只是爲了破解什麼可能是一個真正的警告。難道我們不應該坐直到一個補丁? – 2010-12-11 20:49:09

+0

被警告,我嘗試了escape_utils的解決方案,它導致通過spork運行的黃瓜測試全部崩潰。我在這種情況下得到的錯誤是'in'load':不兼容編組文件格式(無法讀取)(TypeError) \t格式版本4.8必需; 0.0給予' – 2011-07-30 10:19:05

+0

這不是最好的解決方案,因爲它只會導致其他方面的問題。 – efoo 2011-08-15 15:19:57

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)需要升級它的依賴關係纔能有一個乾淨的修復。