我无法获取已创建的临时文件的 URL。我用 ajax 调用的控制器的目标是在每次 dynos 启动时清理的临时目录中生成 PDF,然后返回带有文件 URL 的 JSON。然后等待 JSON 的 JavaScript 将调用window.location.href
以下载 PDF。
我已经做了所有我想的,但它不起作用。我听说 Heroku 每次启动 dynos 时都会清理一个临时目录(参见 create -temporary-files-in-heroku)。但是那个帖子已经有 2 年历史了,并且正在谈论RAILS_ROOT
它已经不存在了。所以我正在使用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"
谁能帮我让它工作?谢谢。