为什么rackmultipart*文件在我的导轨 /TMP目录中持续存在?
-
15-10-2019 - |
题
我正在使用PaperClip(2.3)来处理在Ubuntu上运行的Rails 3.0.3应用程序上的图像上传。 PaperClip正在处理广告上的上传,但是在应用程序 /TMP文件夹中创建的Rackmultipart*文件持续存在 - 也就是说,它们只是积累而不是删除自己。我意识到我可以使用TMPREAPE删除旧的TMPFiles,但我真的很想找到一个更优雅(可扩展)的解决方案。
我曾经在Rails App的root Directory(而不是In /tmp)中积累的TEMP文件(即Rackmultipart* Files)有一个问题。我通过在环境中明确设置温度路径来解决此问题。RB文件这样:
ENV['TMPDIR'] = Rails.root.join('tmp')
是否需要设置另一个环境变量以确保tempfile的处理正确处理 - 即将其保存在模型中后删除?我不确定这是PaperClip还是我的Rails设置的问题。
我已经搜索了高低,但对此几乎没有取得进展。我感谢任何线索。
真诚的谢谢。
PS-我正在使用当前使用S3进行存储。不过,这似乎与问题并不相关 - 当我本地存储文件时,我也遇到了同样的问题。
解决方案
我不知道这是否再优雅,但这是我在保存文件后正在做的事情”
tempfile = params[:file].tempfile.path
if File::exists?(tempfile)
File::delete(tempfile)
end
其他提示
这 临时 是被认为可以解决此问题的机架中间件。
http://www.rubydoc.info/github/rack/rack/rack/rack/tempfilereaper
在应用程序中包括此行。RB解决了问题:
config.middleware.use Rack::TempfileReaper
更新:问题应在机架1.6.0.beta2中解决。我看到它已经在Rails 4.2.0.RC2中使用。
在解决方案下,我已经为我服务了将近一年:
我在控制器操作的末尾添加了此内容,该操作接受文件上传:
Thread.new { GC.start }
此触发未使用机架的垃圾收集::请求对象,该对象还删除了相关的临时文件。请注意,它不会扫描临时文件 当前的 请求,但是它确实会删除以前的文件,并防止它们累积。