2010-08-01 56 views
0

Lorsque j'ouvre une page qui utilise ma feuille de style CSS, elle fonctionne une seule fois, mais ne fonctionnera plus tant que vous n'aurez pas ouvert le fichier CSS et que vous ne l'aurez pas réenregistré. Chaque fois que j'essaie de directement accéder à mon CSS, ça fonctionne bien. Mais les autres fois, il ne fonctionne pas et je reçois cette sortie du serveur:Ruby on Rails: problème de feuille de style impaire

[2010-08-01 12:49:37] ERROR NoMethodError: private method `gsub!' called for #<Class:0x7f6d0639ad80> 
    /usr/lib/ruby/1.8/webrick/htmlutils.rb:16:in `escape' 
    /usr/lib/ruby/1.8/webrick/httpresponse.rb:232:in `set_error' 
    /var/www/rails-blog/vendor/rails/railties/lib/webrick_server.rb:94:in `handle_file' 
    /var/www/rails-blog/vendor/rails/railties/lib/webrick_server.rb:73:in `service' 
    /usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service' 
    /usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' 
    /usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread' 
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start' 
    /usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread' 
    /usr/lib/ruby/1.8/webrick/server.rb:95:in `start' 
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `each' 
    /usr/lib/ruby/1.8/webrick/server.rb:92:in `start' 
    /usr/lib/ruby/1.8/webrick/server.rb:23:in `start' 
    /usr/lib/ruby/1.8/webrick/server.rb:82:in `start' 
    /var/www/rails-blog/vendor/rails/railties/lib/webrick_server.rb:60:in `dispatch' 
    /var/www/rails-blog/vendor/rails/railties/lib/commands/servers/webrick.rb:66 
    /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    /var/www/rails-blog/vendor/rails/activesupport/lib/active_support/dependencies.rb:153:in `require' 
    /var/www/rails-blog/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in `new_constants_in' 
    /var/www/rails-blog/vendor/rails/activesupport/lib/active_support/dependencies.rb:153:in `require' 
    /var/www/rails-blog/vendor/rails/railties/lib/commands/server.rb:49 
    /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    script/server:3 
127.0.0.1 - - [01/Aug/2010:12:49:37 BST] "GET /stylesheets/scaffold.css HTTP/1.1" 500 343 
- -> /stylesheets/scaffold.css?1280662371 

Le code que je utilise pour inclure la feuille de style est <%= stylesheet_link_tag 'scaffold' %>. J'ai redémarré le serveur Ruby mais sans effet. Qu'est-ce qui pourrait causer ce problème?

Cela résulte de la lecture one of the official guides.

Cela ne se produit pas lors de l'exécution de Mongrel.

+0

Quelle version de Rails utilisez-vous ici? – pjmorse

+0

@pjmorse: 2.2.3-2 (Ubuntu 10.04). – Zaz

Répondre

2

Ceci est un bug dans WEBrick, voir http://www.ruby-forum.com/topic/206225.

On 10.06.2010 03:19, Michael Pitman (mcp) posted:

Pour continuer à utiliser Webrick, au lieu de passer à Mongrel, vous pouvez également juste ligne d'édition 15 de lib/ruby ​​/ 1.8/webrick/htmlutils.rb à lire

str = string ? string.to_s.dup : "" 

Le problème est que NotModified exception est passé à se HTMLUtils :: échapper en tant que classe, plutôt qu'une chaîne (initialement généré en HTTPServlet :: DefaultFileHandler). Étant donné que les seules choses qui peuvent vraiment être être échappées HTML sont des chaînes, il devrait être sûr de toujours convertir l'entrée en chaîne.

Je soupçonne que la peine potentiel de performance peut empêcher une solution comme celle de faire à la bibliothèque rubis standard, mais il est une solution simple .

Alternativement, dans la handle_file méthode de DispatchServlet (lib/webrick_server.rb dans les rails petit bijou) de webrick, avant qu'il appelle res.set_error à l'exception, vous pouvez forcer le err.message être un chaîne, ou même effacer le message, car je pense il est mis au rebut de toute façon pour NotModified.

Michael