Оказание 404 в синатре, если файл не найден

У меня есть базовое приложение sinatra, которое отображает файлы из каталога. Я бы хотел, чтобы возвращал 404, если страница не существует. В настоящее время он вызывает 500 ошибок.

get '/:page' do
  erb :"pages/#{params[:page]}", layout: :"layouts/application"
end

Ответ 1

Попробуйте это;)

# 404 Error!
not_found do
  status 404
  erb :oops
end

Сделайте себе страницу 404 с любым именем, которое вам нравится (например, мой oops.erb), и это должно работать нормально.

not_found является помощником по обработке ошибок Sinatra для захвата ошибки 500s и 404 не найденных, которые он возвращает. После этого вы можете изменить статус HTTP и соответствующее представление. Посмотрите документацию для всех обработчиков ошибок Sinatra: они очень полезны!

Ответ 2

Вы можете сделать что-то вроде:

get '/:page' do
  requested_erb = File.join(root, 'pages', params[:page])

  pass unless File.exists?(requested_erb)

  erb :"#{requested_erb}", :layout: :"layouts/application"
end

Я не тестировал это, поэтому могут возникнуть некоторые проблемы с указанным выше кодом, но это общая идея в моей голове.