Как проверить, существует ли шаблон в Синатре - PullRequest
4 голосов
/ 21 октября 2009

В фреймворке Sinatra ruby ​​у меня есть такой маршрут:

get '/portfolio/:item' do
  haml params[:item].to_sym
end

Это прекрасно работает, если шаблон существует (например, если я нажал /portfolio/website, и у меня есть шаблон с именем /views/website.haml), но если я попробую URL, который не имеет шаблона, например example.com/portfolio/notemplate Я получаю эту ошибку:

Errno :: ENOENT в / портфолио / блокнот
Нет такого файла или каталога - /.../views/notemplate.haml

Как я могу проверить и поймать, существует ли шаблон? Я не могу найти метод «если шаблон существует» в документации по Sinatra.

Ответы [ 2 ]

5 голосов
/ 17 декабря 2011

Первый ответ не очень хороший, потому что если файл не существует, символ все равно создается. А поскольку символы не являются мусором, вы легко теряете память. Подумайте только об атаке ddos ​​на несуществующие файлы, которые постоянно создают символы. Вместо этого используйте этот маршрут здесь (взятый из одного из моих проектов, направляющих файлы css):

# sass style sheet generation
get '/css/:file.css' do
  halt 404 unless File.exist?("views/#{params[:file]}.scss")
  time = File.stat("views/#{params[:file]}.scss").ctime
  last_modified(time)
  scss params[:file].intern
end
5 голосов
/ 21 октября 2009

Не уверен, есть ли какой-то особый способ сделать это для Синатры, но вы всегда можете перехватить исключение Errno :: ENOENT, например:

get '/portfolio/:item' do
  begin
    haml params[:item].to_sym
  rescue Errno::ENOENT
    haml :default
  end 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...