Przekazywanie błędów w aplikacjach racka

Witam,

W aplikacji railsowej zrobiłem sobie aplikację sinatry, która obsługuje api serwisu.

Natknąłem się na drobny problem.

begin Page.find(params[:id]).to_json rescue ActiveRecord::RecordNotFound error(404) end
W założeniach taki kod miał zwracać mi błąd 404, gdy nie znalazła się dana strona. I rzeczywiście tak się dzieje, ale nie do końca tak, jak sobie to obmyśliłem.

No route matches "/api/v1/calendar_pages/1000.json" with {:method=>:get}

Trace wskazuje na jeden z kilku innych middlewarów. Jeżeli dobrze rozumiem specyfikę racka, gdy ustawiam status 404, sinatra nie ma już co z tym zrobić i przesyła to dalej poprzez wszystkie middlewary, aż do railsów. W przypadku każdego (?) innego statusu, sinatra nie przesyła tego dalej.

To nie jest jakiś wielki problem, bo miało być 404 i jest 404, ale jednak chciałbym zrobić tak, żeby sinatra od razu rzuciła mi tym błędem nie pchając tego poprzez cały stack.

Spotkał się może ktoś z czymś takim? Wiadomo jak można to ładnie przeskoczyć?

Pozdrawiam
Łukasz

Takie a nie inne zachowanie wynika ze specyfiki rails metals. Ja ten problem rozwiązałem poprzez “ręczne” wpięcie middleware (nie poprzez “rails metal”), na zasadzie:

config.middleware.insert_before "Rails::Rack::Metal", "Api::Application"