diff --git a/packages/ruby/server/lib/server/dir.rb b/packages/ruby/server/lib/server/dir.rb index 4949b997e..d64ef48b6 100644 --- a/packages/ruby/server/lib/server/dir.rb +++ b/packages/ruby/server/lib/server/dir.rb @@ -20,6 +20,9 @@ class Server::Dir rescue Errno::ENOENT body = "The requested URL was not found" [404, {"content-length" => body.bytesize, "content-type" => "text/plain"}, [body]] + rescue => ex + body = "Internal server error (#{ex.class})" + [500, {"content-length" => body.bytesize, "content-type" => "text/plain"}, [body]] end private diff --git a/packages/ruby/server/test/server_dir_test.rb b/packages/ruby/server/test/server_dir_test.rb index bbf55bcc6..f09c79978 100644 --- a/packages/ruby/server/test/server_dir_test.rb +++ b/packages/ruby/server/test/server_dir_test.rb @@ -43,6 +43,17 @@ class ServerDirTest < Test::Unit::TestCase last_response.content_length end + def test_internal_server_error + def app.read(path) raise RuntimeError, "test" end + get "/" + assert_equal 500, last_response.status + assert_equal "text/plain", last_response.content_type + assert_equal "Internal server error (RuntimeError)".bytesize, + last_response.content_length + assert_equal "Internal server error (RuntimeError)", + last_response.body + end + def test_permission_denied File.chmod 0, "./test/webroot/permission_denied.html" get "/permission_denied.html"