作成した一時ファイルの URL を取得できません。ajax で呼び出されるコントローラーの目的は、dyno が起動するたびに消去される一時ディレクトリに PDF を生成し、ファイルの URL を含む JSON を返すことです。window.location.href
JSON を待機している JavaScriptは、PDF をダウンロードするために呼び出します。
考えられることはすべて実行しましたが、うまくいきません。Heroku では、dyno が開始されるたびに一時ディレクトリが消去されると聞きました ( creating-temporary-files-in-heroku を参照)。RAILS_ROOT
しかし、その投稿は 2 年前のものであり、もう存在しないという話です。だから私は使用していますRails.root.join('app', 'tmp')
これが私のコントローラー機能です:
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
。
node(:tempurl) { @tempurl }
node(:tempfile) { @tempfile.path }
私はtempfile
ディレクトリが良いかどうかを確認するために使用しています。それは与えます:
/home/alain/Projects/Heroku/pj/app/tmp/_20131022-4464-alrmkb.pdf
JavaScript にとって重要な実際の値は次のtempurl
とおりです。
http://0.0.0.0:5000/tmp/_20131022-4464-alrmkb.pdf
そして、これにアクセスするとtempurl
、次のエラーが発生します。
No route matches [GET] "/tmp/_20131022-4464-alrmkb.pdf"
誰かがそれを機能させるのを手伝ってくれますか? ありがとう。