I have an application as simple as this:
require "sinatra"
get "/" do
raise "Oops!"
end
Since this is a debug environment, I'd expect to see a "RuntimeError: Oops!" show up in the browser. Instead, it seems Sinatra is crashing:
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 console:
RuntimeError - Oops!: test.rb:5:in `block in ' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1603:in `block in compile!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `[]' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (3 levels) in route!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:985:in `route_eval' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:966:in `block (2 levels) in route!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1006:in `block in process_route' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `catch' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1004:in `process_route' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:964:in `block in route!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `each' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:963:in `route!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1076:in `block in dispatch!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1073:in `dispatch!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `block in call!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `block in invoke' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `catch' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1058:in `invoke' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:898:in `call!' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:886:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-1.6.0.beta/lib/rack/logger.rb:15:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-1.6.0.beta/lib/rack/commonlogger.rb:33:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:217:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:210:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-1.6.0.beta/lib/rack/head.rb:13:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/rack-1.6.0.beta/lib/rack/methodoverride.rb:22:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:21:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/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/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:37:in `rescue in call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/show_exceptions.rb:21:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:180:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:2014:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `block in call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1788:in `synchronize' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/gems/sinatra-1.4.5/lib/sinatra/base.rb:1478:in `call' /home/tomas/.rvm/gems/ruby-2.0.0-p481@test/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
That's completely unhelpful to me. What's going on here?
It looks like a recent change in Rack introduced this bug in Sinatra, which has been fixed but the fix hasn’t (at the time of writing) been included in a release.
The easiest fix (until an updated Sinatra gem is released) would be to use an earlier version of Rack (the change is only currently in 1.6.0.beta). Add this line to your Gemfile
if you’re using Bundler, or somewhere near the start of your script (before you require
anything) if you’re not:
gem 'rack', '1.5.2'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With