問題は、デフォルトのハンドラーがSinatra::ShowExceptionsで定義されていることです。これは:raise_errors構成設定によって制御され、この設定はすべてかゼロかです。:raise_errorsがオフの場合、 Sinatra アプリでエラーメソッドを使用できますが、すべての例外に対して使用する必要があり、Sinatra::ShowExceptionsで定義されたエラー ハンドラーへのアクセスはありません。オンの場合、すべての例外は ShowExceptions ミドルウェアによって処理されます。
私がやりたいことの理論的根拠は、少なくとも開発中に、「予期される」エラーをユーザーフレンドリーな方法で処理し、「予期しない」エラーを開発者に優しい方法で処理することです。
これを行う唯一の方法は、 Sinatra::ShowExceptionsから継承するラック ミドルウェア クラスを定義することであり、そのuseメソッドには、処理する例外のクラスと処理しない例外のクラスを指定する追加のオプションがあると思います。
私が見逃している簡単な方法はありますか?
(違いがあれば、jrubyを使用しています。)