0

作成した一時ファイルの URL を取得できません。ajax で呼び出されるコントローラーの目的は、dyno が起動するたびに消去される一時ディレクトリに PDF を生成し、ファイルの URL を含む JSON を返すことです。window.location.hrefJSON を待機している 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"

誰かがそれを機能させるのを手伝ってくれますか? ありがとう。

4

1 に答える 1