0

当我打开一个使用我的 CSS 的页面时,它会工作一次,但在你打开 CSS 并重新保存之前不会再次工作。每次我尝试直接访问我的 CSS 时,它都可以正常工作。但其他时候,它不起作用,我收到这个服务器输出:

[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

我用来包含样式表的代码是<%= stylesheet_link_tag 'scaffold' %>. 我已经重新启动了 Ruby 服务器,但没有任何效果。什么可能导致这个问题?

这是来自阅读官方指南之一

运行 Mongrel 时不会发生这种情况。

4

1 回答 1

2

这是 WEBrick 中的一个错误,请参阅http://www.ruby-forum.com/topic/206225

在 10.06.2010 03:19,Michael Pitman (mcp) 发布

要继续使用 Webrick,而不是切换到 Mongrel,您也可以编辑 lib/ruby/1.8/webrick/htmlutils.rb 的第 15 行以阅读

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

问题是 NotModified 异常作为类而不是字符串(最初在 HTTPServlet::DefaultFileHandler 中引发)传递给 HTMLUtils::escape。由于唯一可以真正被 HTML 转义的是字符串,因此始终将输入转换为字符串应该是安全的。

我怀疑潜在的性能损失可能会阻止这样的解决方案进入标准 ruby​​ 库,但这是一个简单的解决方法。

或者,在 webrick 的 DispatchServlet 的 handle_file 方法中(rails gem 中的 lib/webrick_server.rb),在它调用 res.set_error 之前,你可以强制 err.message 是一个字符串,甚至清除消息,因为我认为它无论如何都被 NotModified 丢弃了。

迈克尔

于 2010-09-13T16:25:54.063 回答