When an exception occurs, the before blocks are run a second time before the error block is called. It's like the full request cycle is being invoked when an error occurs. This only seems to apply to exceptions. Calls to halt do not cause the error blocks to be re-run.
Is this the intended behavior, and if so, in what scenario is this behavior desirable?
Edit: I should add that I'm using 0.10.5 as I've got another issue open regarding a problem encountered while upgrading to 0.10.6.
Yes, you're right, it does happen like that and still happens in both 0.10.7 and edge. Same thing happens on Sinatra.
error 500 do
get :index do
raise Exception, "Oops"
or jist it with curl -L http://jister.uxtemple.com | `which bash` -s 57c7415df6c0bbbd0e0d ;)
curl -L http://jister.uxtemple.com | `which bash` -s 57c7415df6c0bbbd0e0d
Will dig deeper and see what happens. Have a feeling it might be connected to #931.
The issue is related to #591
static! if settings.static? && (request.get? || request.head?)
rescue ::Exception => boom
filter! :before #here is the second call for filters
filter! :after unless env['sinatra.static_file']
fixing #818, respecting #591, adding a test
Confirmed it fixes it. Thanks @ujifgc!!