2013-10-22 2 views
0

작성한 임시 파일의 URL을 가져 오는 데 문제가 있습니다. ajax와 함께 호출되는 컨트롤러의 목적은 dynos가 시작할 때마다 정리 된 임시 dir에서 PDF를 생성 한 다음 JSON을 파일의 URL과 함께 반환하는 것입니다. JSON을 기다리는 자바 스크립트는 window.location.href을 호출하여 PDF를 다운로드합니다.Ruby, heroku : 임시 파일 (이진 파일)의 URL 가져 오기

내가 생각한 모든 것을 다했으나 작동하지 않습니다. Heroku가 dynos가 시작될 때마다 임시 디렉토리가 정리되어 있다고 들었습니다 (cf creating-temporary-files-in-heroku). 하지만이 게시물은 2 살이며 더 이상 존재하지 않는 RAILS_ROOT에 대해 이야기하고 있습니다.

def print_a 
    pdf = render_to_string :pdf => params[:name], 
    :template => "prints/printA.pdf.html.erb", 
    :layout => nil 

    temp_dir = Rails.root.join('app','tmp') 
    Dir.mkdir(temp_dir) unless Dir.exists?(temp_dir) 
    @tempfile = Tempfile.new [params[:name], '.pdf'], temp_dir 
    @tempurl = "#{request.protocol}#{request.host_with_port.sub(/:80$/,"")}/tmp/#{File.basename(@tempfile.path)}" 
    File.open(@tempfile.path, 'wb') do |file| 
     file << pdf 
    end 

    render "prints/printA.rabl" 
end 

json으로는 prints/printA.rabl를 통해 렌더링 : 나는 DIR 좋은 있는지 tempfile을 사용하고

node(:tempurl) { @tempurl } 
node(:tempfile) { @tempfile.path } 

그래서 Rails.root.join('app', 'tmp')

를 사용하고 여기에 내 컨트롤러 기능입니다. 그것은 제공 :

http://0.0.0.0:5000/tmp/_20131022-4464-alrmkb.pdf

그리고이 tempurl을 방문하는 경우, 나는이 오류를 얻을 :

/home/alain/Projects/Heroku/pj/app/tmp/_20131022-4464-alrmkb.pdf

자바 스크립트에 대한 중요한 실제 값이 tempurl입니다

No route matches [GET] "/tmp/_20131022-4464-alrmkb.pdf"

아무도 도와 드릴 수 있습니까? 그것을 작동 시키세요? 감사.

답변

1

tmp 폴더를 가리킬 수 없습니다. 그만큼 간단합니다. 공공는 HTTP 서버

b)는 귀하의 레일 응용 프로그램

에서 어떤 컨트롤러 액션을 통해 파일을 스트리밍으로 제공되기 때문에 당신이 할 수있는

가) 공용 폴더에 TMP 폴더를 넣어이다

관련 문제