Before block is run twice when an error occurs #818

Wardrop opened this Issue Mar 30, 2012 · 3 comments

3 participants


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.

Padrino Framework member

Yes, you're right, it does happen like that and still happens in both 0.10.7 and edge. Same thing happens on Sinatra.

Test code:

  error 500 do
    'error 500'

  before do
    puts 'before'                                                                                                                                                                    

  get :index do
    raise Exception, "Oops"

or jist it with curl -L | `which bash` -s 57c7415df6c0bbbd0e0d ;)

Will dig deeper and see what happens. Have a feeling it might be connected to #931.

Padrino Framework member

The issue is related to #591

    def dispatch!
      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']
@ujifgc ujifgc added a commit to ujifgc/padrino-framework that referenced this issue Jan 10, 2013
@ujifgc ujifgc fixing #818, respecting #591, adding a test 560c949
Padrino Framework member

Confirmed it fixes it. Thanks @ujifgc!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment