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サーバーを再起動しましたが、効果がありません。この問題の原因は何ですか?

これは、公式ガイドの1つを読んだことによるものです。

Mongrelを実行している場合、これは発生しません。

4

1 に答える 1

2

これはWEBrickのバグです。http: //www.ruby-forum.com/topic/206225を参照してください。

2010年6月10日03:19に、Michael Pitman(mcp)が投稿しました

Mongrelに切り替える代わりに、Webrickを引き続き使用するには、lib / ruby​​ / 1.8 / webrick/htmlutils.rbの15行目を編集して読むこともできます。

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

問題は、NotModified例外が文字列ではなくクラスとしてHTMLUtils :: escapeに渡されることです(元々はHTTPServlet :: DefaultFileHandlerで発生しました)。実際にHTMLエスケープできるのは文字列だけなので、入力を常に文字列に変換しても安全です。

潜在的なパフォーマンスの低下により、そのようなソリューションが標準のrubyライブラリに到達できなくなる可能性があると思いますが、これは簡単な回避策です。

または、webrickのDispatchServletのhandle_fileメソッド(railsgemのlib/ webrick_server.rb)で、例外を除いてres.set_errorを呼び出す前に、err.messageを文字列にするか、メッセージをクリアすることもできます。 NotModifiedではとにかく破棄されたと思います。

マイケル

于 2010-09-13T16:25:54.063 に答える