我正在使用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 }

此触发未使用机架的垃圾收集::请求对象,该对象还删除了相关的临时文件。请注意,它不会扫描临时文件 当前的 请求,但是它确实会删除以前的文件,并防止它们累积。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top