2010-09-01 8 views
24

ich gerade aktualisiert Schienen 3, um zu versuchen, mit Ruby 1.9.2-p0 mit rvm.Rubin 1.9.2 seltsame Warnung, wenn Gurke Spezifikationen laufen

Als ich betreibe meine Gurke specs dann bekomme ich folgende seltsame Warnungen

/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 

Mein Bundle enthält Edelsteine ​​folgende ...

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) 

Wer weiß, wie diese Warnungen loszuwerden? Und woher kommen sie?

+0

Ich habe genau das gleiche. Ich würde gerne die Ursache herausfinden! –

+1

Hallo zusammen - würden Sie die letzte Antwort auf diese Frage gegeben auszuchecken etwas dagegen: http://stackoverflow.com/questions/3622394/ruby-1-9-2-strange-warning-when-running-cucumber-specs/7189698# 7189698 Ich glaube, es behebt Ihr Problem und wäre Ihnen dankbar, wenn Sie es als korrekt markieren könnten. Ty –

Antwort

19

Es ist eine gute Lösung für diese, die mich auf einem Blog-Eintrag von Enrico Stahn gefunden: http://blog.enricostahn.com/warning-regexp-match-n-against-to-utf-8-strin

Das Problem ist in Rack- und hat offenbar bereits been fixed in 1.3.0, aber Sie können nicht in der Lage sein, Upgrade auf es noch.

So, bis Sie 1.3.0 auf Rack-aktualisieren können, erstellen Sie die Datei config/initializers/rack_hotfix.rb mit folgendem Inhalt:

# 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 

Das funktionierte einen Reiz für mich und dann ergänzte ich es mit einem anstehenden Test auf meinem RSpec-Dateien als sanfte Erinnerung, um den Initialisierer fallen zu lassen, sobald das Rack aktualisiert wurde.

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

end 
+1

Danke! Das hat super für mich funktioniert. – shakerlxxv

+2

Wenn Sie Rails 3.0.10 verwenden, können Sie nicht auf Rack 1.3+ aufrüsten, also sollten Sie diesen Trick anwenden! Persönlich mag ich keine ausstehenden Tests, wenn Sie wie ich sind, können Sie diese Beispiele verwenden: 'it" sollte den rack_hotfix.rb Initialisierer vor Rack 1.3.0 "tun wenn Rack.release.to_f <= 1.2 Rack-:: Utils :: hotfixed.should be_true Ende Ende es tun "sollte die rack_hotfix.rb initializer nach Rack 1.3.0 nicht enthalten" wenn Rack.release.to_f> = 1,3 erwarten {Rack: : Utils.hotfixed} .to raise_error Ende Ende' Fügen Sie diese Zeile zum Hotfix hinzu: 'def self.hotfixed true Ende ' – rchampourlier

0

Vielleicht sind Ihre Skripte in ASCII oder einem anderen Format von UTF-8 codiert?

+0

Was bedeutet das? Können Sie einige Details angeben? Ist es mein Editor, der Dateien als UTF-8 behandeln muss? Da die Warnung von Rack-kommt so weit, wie ich denke, kann ... –

6

dies in features/support in eine Datei speichern oder es in der env.rb Datei setzen:

# 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 

Dies wird diese Warnungen unterdrücken, obwohl ich nicht sicher bin, was sich in erster Linie verursacht. Ich erhalte sie, auch

6

Es ist ein Juwel „escape_utils“ genannt ist, die sich um dieses Problem nimmt. Hier ist der link zu einem Artikel, der das Problem erklärt.

+4

Ich hasse nur ein Juwel und Modul hinzufügen zu hacken um das, was könnte eine echte Warnung sein. Sollten wir nicht bis zu einem Patch sitzen bleiben? –

+0

Sei gewarnt, ich habe die Lösung mit escape_utils ausprobiert und es verursacht, dass die Gurken-Tests, die über Spork laufen, in ihrer Gesamtheit durchbrechen. Der Fehler, den ich in diesem Fall bekomme, ist 'in \ 'load': inkompatibles Marshal-Dateiformat (kann nicht gelesen werden) (TypeError) \t Formatversion 4.8 erforderlich; 0,0 gegeben' –

+0

Dies ist nicht die beste Lösung, da es nur Probleme in anderen Bereichen verursacht. – efoo

7

See:

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

für einige Diskussion des Problems. Die Lösung scheint zu sein, dass sowohl Capybara als auch Rack etwas ändern mussten, um eine gute Lösung zu finden.

Wenn ich richtig verstehen, Schärfen 1.3 und Capybara 1.0 sollte das Problem lösen. Im Moment benötigt Rails 3.0.8 jedoch noch Rack ~> 1.2.1 und ignoriert Rack 1.3, selbst wenn Sie es installiert haben. Also denke ich, dass Rails (speziell Actionpack) seine Abhängigkeit aktualisieren muss, um eine saubere Lösung zu haben.