2

我在 Sinatra 模块化应用程序中重定向错误时遇到问题。我在 Heroku 上进行部署,当出现错误时,应用程序会死掉。

我希望它能够捕捉到这个错误,重定向到错误页面并正常运行。

我在我的基类中设置了如下内容:

set :raise_errors, false

error do
    redirect to('/')
end

但是当我raise从路由块内出错时,它只会进入标准的 Sinatra 错误页面。

我需要做什么来捕获我的错误并重定向?

4

1 回答 1

9

你还需要

set :show_exceptions, false

这是一个简单的演示

require "sinatra"

class App < Sinatra::Base

    set :raise_errors, false
    set :show_exceptions, false

    get '/' do
        return 'Hello, World!'
    end

    get '/error' do
        return 'You tried to divide by zero!'
    end

    get '/not-found' do
        return 'There is nothing there'
    end

    get '/raise500' do
        raise 500
    end

    get '/divide-by-zero' do
        x = 5/0
    end

    error do
        redirect to('/')
    end

    error 404 do
        redirect to('/not-found')
    end

    error ZeroDivisionError do
        redirect to('/error')
    end

end

没有:show_exceptions设置/raise500/divide-by-zero返回通用的 Sinatra 错误页面,但有了它,它们会按照您的预期重定向。

于 2012-11-17T00:38:05.223 回答