【发布时间】:2011-05-18 10:35:25
【问题描述】:
前段时间我写了a question 关于在rails 应用程序中使用临时文件的问题。在特殊情况下,我决定使用tempfile
如果我还想使用 x-sendfile 指令 (as a parameter in Rails 2, or as a configuration option in Rails 3) 以便文件发送由我的 Web 服务器直接处理,而不是我的 Rails 应用程序,这会导致问题。
所以我想过做这样的事情:
require 'tempfile'
def foo()
# creates a temporary file in tmp/
Tempfile.open('prefix', "#{Rails.root}/tmp") do |f|
f.print('a temp message')
f.flush
send_file(f.path, :x_sendfile => true) # send_file f.path in rails 3
end
end
此设置有一个问题:文件在发送前被删除!
一方面,tempfile 将在 Tempfile.open 块结束后立即删除文件。另一方面,x-sendfile 使 send_file 调用异步 - 它返回非常快,因此服务器几乎没有时间发送文件。
我现在最好的解决方案是使用非临时文件(文件而不是临时文件),然后是一个定期擦除临时文件夹的 cron 任务。这有点不雅,因为:
- 我必须使用自己的临时文件命名方案
- 文件在 tmp 文件夹中的停留时间超过了所需时间。
有更好的设置吗?或者,异步send_file上是否至少有一个“成功”回调,所以我可以在完成后擦除f?
非常感谢。
【问题讨论】:
标签: ruby-on-rails ruby temporary-files x-sendfile