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 に答える