2014-10-08 3 views
7

Ich habe eine Anwendung so einfach wie diese:Warum stürzt Sinatras Datei "show_exceptions.rb" ab, wenn ich einen RuntimeError erstelle?

require "sinatra" 

get "/" do 
    raise "Oops!" 
end 

Da dies eine Debug-Umgebung, würde ich erwarten, dass ein sehen „Runtime: Oops“ im Browser erscheinen. Stattdessen scheint es Sinatra abstürzt:

NoMethodError at/
undefined method `join' for #<String:0x00000002b74bf0> 

Ruby /home/tomas/.rvm/.../gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb: in rescue in call, line 37 
Web  GET 127.0.0.1/

Backtrace in der Konsole:

RuntimeError - Oops!: 
    test.rb:5:in `block in ' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:985:in `route_eval' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (2 levels) in route!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1006:in `block in process_route' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `catch' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `process_route' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:964:in `block in route!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `each' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `route!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1076:in `block in dispatch!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1073:in `dispatch!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `block in call!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `call!' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:886:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/logger.rb:15:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/commonlogger.rb:33:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:217:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:210:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/head.rb:13:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/methodoverride.rb:22:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:21:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:89:in `service' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 
[2014-10-08 12:42:42] ERROR NoMethodError: undefined method `join' for #<String:0x007f52e055ce38> 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:37:in `rescue in call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:21:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize' 
    /home/tomas/.rvm/gems/[email protected]/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call' 
    /home/tomas/.rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:89:in `service' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
    /home/tomas/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 
localhost - - [08/Oct/2014:12:42:42 CEST] "GET/HTTP/1.1" 500 340

Das ist für mich völlig nutzlos ist. Was ist denn hier los?

Antwort

11

Es sieht aus wie ein recent change in Rack diesen Fehler in Sinatra eingeführt, die has been fixed, aber das Update wurde nicht (zum Zeitpunkt des Schreibens) in einem Release enthalten.

Die einfachste Lösung (bis ein aktualisierter Sinatra gem freigegeben wird) wäre eine frühere Version von Rack zu verwenden (die Änderung nur noch in 1.6.0.beta ist). Fügen Sie diese Zeile in Gemfile wenn Sie Bündler verwenden, oder irgendwo in der Nähe von Beginn des Skripts (bevor Sie require etwas), wenn Sie nicht:

gem 'rack', '1.5.2' 
+1

Recht sind Sie, Sir – Hubro

+1

Es sei darauf hingewiesen, dass Nach der Aktualisierung der 'Gemfile' sollte' rackup' immer mit 'bundle exec rackup' ausgeführt werden, um sicherzustellen, dass die entsprechende Version des Racks verwendet wird. –

Verwandte Themen