2017年8月9日水曜日

Sinatra で該当しないパスにアクセスされたときの対応方法

概要

例えば「/」や「/hoge」の定義はあるけど「/fuga」の定義を指定いない場合 Sinatra はデフォルトの 404 エラー画面を出力します
API サーバなどで本来 JSON が返る場合にデフォルトのエラー画面だと HTML が返却されてしまい SDK のクライアント側がクラッシュしたりするケースがあります
そこで該当しないパスにきたときに Sinatra 側でカスタムしたエラー画面を返却する方法を紹介します

環境

  • macOS X 10.12.6
  • Ruby 2.4.1p111
  • gem 2.6.11
  • sinatra 1.4.8

セットアップ

  • bundle init
  • vim Gemfile
gem "sinatra"
gem "thin"
  • bundle install --path vendor/bundle

アプリ作成

  • vim app.rb
require 'sinatra'

get '/' do
  'hello'
end

not_found do
  'not found'
end

ポイントは not_found という関数を使用している点です
これを定義することになり 404 のイベントが発生した際にこの not_found メソッドがコールされます

動作確認

  • bundle exec ruby app.rb
  • curl localhost:4567
hello
  • curl localhost:4567/hoge
not found

という感じになります

最後に

Sinatra で 404 エラーが発生した時の対応をしてみました
関数を一つ定義するだけなので簡単に対応することができました

もしかすると古い Sinatra にはないかもしれません

0 件のコメント:

コメントを投稿