Я пытаюсь настроить Sinatra на
- Показывать простую строку 404 во всех запросах, которые не найдены.
- Отправлять пользовательский видеофайл 404 по одному маршруту, когда Маршрут не может выполнить запрос.
Минимальный код для отображения проблемы:
# somefile.txt
some content
# server.rb
require 'sinatra'
require 'sinatra/reloader'
set :bind, '0.0.0.0'
set :port, 3000
not_found do
content_type :text
"404 Not Found"
end
get '/test' do
# in reality this is a video file, not a text file.
# .. do some work here, and if failed, send 404 file ...
# this does not work, since it triggers the not_found filter above
send_file "somefile.txt", type: :text, status: 404
# this works, but with 200 instead of 404
# send_file "somefile.txt", type: :text
end
Фильтр not_found
захватывает все, даже send_file ... status: 404
Мне кажется, это немного похоже на ошибку в send_file
, но, возможно, я ошибаюсь.
Есть ли способ указать «пропустить фильтр not_found» или любой другой более подходящий способ для достижения этой цели?
Имейте в виду, что на самом деле этот сервер должен возвращать не найденное видео файл, а не текстовый файл. Я использовал здесь текст только для простоты.