문제

Sinatra Ruby 프레임 워크에는 다음과 같은 경로가 있습니다.

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

이것은 존재하는 템플릿이 있으면 훌륭하게 작동합니다 (예 : 내가 치면 /portfolio/website, 그리고 나는 템플릿이 호출되어 있습니다 /views/website.haml),하지만 템플릿이없는 URL을 시도하면 example.com/portfolio/notemplate, 나는이 오류를 얻는다 :

errno :: enoent at /portfolio /notemplate
그러한 파일이나 디렉토리 - /.../views/notemplate.haml이 없습니다

템플릿이 존재하는지 어떻게 테스트하고 잡을 수 있습니까? Sinatra 문서에서 "템플릿이 존재하는 경우"메소드를 찾을 수 없습니다.

도움이 되었습니까?

해결책

Sinatra 특정 방법이 있는지 확실하지 않지만 항상 Errno :: Enoent Exception을 잡을 수 있습니다.

get '/portfolio/:item' do
  begin
    haml params[:item].to_sym
  rescue Errno::ENOENT
    haml :default
  end 
end

다른 팁

파일이 존재하지 않으면 어쨌든 기호가 생성되기 때문에 첫 번째 대답은 좋지 않습니다. 그리고 상징은 쓰레기가 수집되지 않기 때문에 기억이 쉽게 누출됩니다. 기호를 항상 생성하는 비시 시트 파일에 대한 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top