gpt4 book ai didi

ruby-on-rails - rails - x-sendfile + 临时文件

转载 作者:数据小太阳 更新时间:2023-10-29 06:55:02 24 4
gpt4 key购买 nike

前段时间我写了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 block 结束后立即删除文件。另一方面,x-sendfile 使 send_file 调用异步 - 它返回得非常快,因此服务器几乎没有时间发送文件。

我现在最好的解决方案是使用非临时文件(File 而不是 Tempfile),然后使用 cron 任务定期删除临时文件夹。这有点不雅,因为:

  • 我必须使用自己的临时文件命名方案
  • 文件在 tmp 文件夹中的保留时间超过了所需的时间。

有没有更好的设置?或者,异步 send_file 是否至少有一个“成功”回调,以便我可以在完成后删除 f?

非常感谢。

最佳答案

鉴于 Rails3 在 x-sendfile 可用时使用它,并且没有办法停用它,您不能将 send_file 与 TempFile 等库一起使用。最好的选择是我在问题中提到的那个:使用常规文件,并有一个定期删除旧临时文件的 cron 任务。

编辑:使用 maid gem 可以更轻松地处理未使用文件的删除:

https://github.com/benjaminoakes/maid

关于ruby-on-rails - rails - x-sendfile + 临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6043313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com