2009-06-22 11 views
2

정상적인 위치에 있지 않은 이미지가 있다고 가정 해 보겠습니다.기존 디렉토리 위치에 있지 않은 미디어 리소스에 액세스하도록 레일스를 구성하는 방법은 무엇입니까?

{appname}/public/images/unconventional.gif 

그러나 대신 여기 :

{appname}/unconventional.gif 

이것은 레일 규칙을 완전히 위반 한 것이지 부도덕 한 것입니다. 어떤 상황에서도 이것을 결코하지 말아야하며, 어째서 왜 나는 어리석은 일을 제안 할까?

좋아, 이제는 Windows에서 동작한다고 가정하고 심볼릭 링크가 문제가되지 않는다고 가정 할 때,이 문제를 어떻게 해결할 수 있습니까?

답변

6

레일스는 이러한 이미지를 제공하지 않으므로 웹 서버에서이를 수행 할 수 있습니다. 이 시나리오를 처리하기 위해 웹 서버의 구성을 가장 잘 변경해야합니다. 예를 들어 Apache을 사용하는 경우 mod_rewrite으로 설정하는 것이 매우 쉽습니다.

만들기 레일은 이러한 이미지는 추한 것 역할을하지만 /public/images/unconventional.gif 일치, 파일 자체가 존재하지 않는 경우 routes.rb의 경로를 제공하는 경우 가능하다. 예를 들어 :

class StaticImageController < ApplicationController 
    def serve 
    image = File.read(File.join(Rails.root, "unconventional.gif")) 
    send_data image, :type => "image/gif", :disposition => "inline" 
    end 
end 

경고 : 당신이 결정하는 URL 입력을 사용하는 경우 위의 개념을 사용하는 경우는주의 파일 봉사하는 것을 다음

map.connect "public/images/unconventional.gif", 
    :controller => "static_image_controller", 
    :action => "serve" 

및 컨트롤러 StaticImageController를 만들 (예 : params[:file]), 을 철저히 사용해야합니다.은 전체 파일 시스템이 외부 세계에 노출 될 위험이 있으므로 입력을 삭제합니다.