2010-09-01 20 views
24

Je viens de mettre à jour pour essayer les rails 3, en utilisant rvm avec ruby ​​1.9.2-p0.ruby ​​1.9.2 avertissement étrange lors de l'exécution des spécifications de concombre

Quand je lance mes specs de concombre puis je me suivant des avertissements étranges

/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 

Mon paquet contient des pierres précieuses suivantes ...

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) 

personne ne sait comment se débarrasser de ces mises en garde? Et d'où viennent-ils?

+0

J'ai exactement la même chose. J'aimerais trouver la cause! –

+1

Salut là-bas - Pourriez-vous vérifier la dernière réponse donnée à ceci: http://stackoverflow.com/questions/3622394/ruby-1-9-2-strange-warning-when-running-cucumber-specs/7189698# 7189698 Je crois que cela résout votre problème et vous seriez reconnaissant si vous pouviez le marquer comme correct. Ty –

Répondre

19

Il y a une bonne solution disponible à ce que j'ai trouvé sur un blog par Enrico Stahn: http://blog.enricostahn.com/warning-regexp-match-n-against-to-utf-8-strin

Le problème est en rack et a apparemment déjà been fixed dans la version 1.3.0, mais vous ne pouvez pas être en mesure de mise à niveau pour encore.

Donc, jusqu'à ce que vous pouvez mettre à niveau vers rack 1.3.0, créez le fichier config/initializers/rack_hotfix.rb avec le contenu suivant:

# 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 

Cela a un charme pour moi et je l'ai complété par un test en attente de sur mon Fichiers RSpec comme un rappel doux pour laisser tomber l'initialiseur une fois que Rack a été mis à jour.

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

end 
+1

Merci! Cela a fonctionné très bien pour moi. – shakerlxxv

+2

Lorsque vous utilisez Rails 3.0.10, vous ne pouvez pas mettre à niveau vers Rack 1.3+, c'est donc une astuce à utiliser! Personnellement, je n'aime pas avoir des tests en attente, si vous êtes comme moi, vous pouvez utiliser ces exemples: 'ça" devrait inclure l'initialiseur rack_hotfix.rb avant le rack 1.3.0 "faire si Rack.release.to_f <= 1.2 rack :: :: Utils hotfixed.should be_true fin fin il "ne doit pas inclure le initialiseur rack_hotfix.rb après support 1.3.0" faire si Rack.release.to_f> = 1.3 {attendre rack: : Utils.hotfixed} .to raise_error fin end' Il suffit d'ajouter cette ligne au correctif: 'def self.hotfixed true end' – rchampourlier

0

Peut-être que vos scripts sont encodés en ASCII ou en un format différent de UTF-8?

+0

Qu'est-ce que cela signifie? Pouvez-vous fournir quelques détails? Est-ce mon éditeur qui doit traiter les fichiers comme UTF-8? Parce que l'avertissement vient de Rack autant que je peux le deviner ... –

6

Ajouter à un fichier features/support ou le mettre dans le fichier 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 

Cela supprime ces avertissements, mais je ne suis pas sûr de ce qui les cause en premier lieu. Je les obtiens, aussi

6

Il y a une gemme appelée "escape_utils" qui s'occupe de ce problème. Voici le link à un article expliquant le problème.

+4

Je déteste ajouter une gemme et un module juste pour pirater ce qui pourrait être un vrai avertissement. Ne devrions-nous pas nous asseoir juste jusqu'à un patch? –

+0

Attention, j'ai essayé la solution avec escape_utils et les tests de concombre exécutés via spork se décomposent dans leur intégralité. L'erreur que j'obtiens dans ce cas est 'in \' load ': format de fichier marshal incompatible (ne peut pas être lu) (TypeError) \t format de la version 4.8 requis; 0.0 given' –

+0

Ce n'est pas la meilleure solution car cela ne fait que créer des problèmes dans d'autres domaines. – efoo

7

Voir:

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

pour une discussion sur la question. La résolution semble être que Capybara et Rack avaient besoin de changer certaines choses pour arriver à une bonne solution. Si je comprends bien, Rack 1.3 et Capybara 1.0 devraient résoudre le problème. Pour le moment cependant, Rails 3.0.8 nécessite encore Rack ~> 1.2.1, en ignorant Rack 1.3 même si vous l'avez installé. Donc je pense que Rails (en particulier actionpack) devra mettre à jour sa dépendance pour avoir une solution propre.