上传大文件(> 1Go)失败,错误" Errno :: ENOSPC:设备上没有剩余空间"

时间:2015-03-17 19:16:05

标签: ruby-on-rails-3 amazon-web-services paperclip passenger

Rails 3.2.20,Ruby 1.9.3p194,Apache 2.2.22,Passenger 3.0.21。

文件上传到/tmp(我在查看日志时的想法:

Parameters: {
...
@tempfile=#<File:/tmp/RackMultipart20150317-1329-19lcteh>>
...
}

大文件上传(例如对于1.8Go文件)使用日志跟踪引发异常Errno::ENOSPC: No space left on device - write

/usr/local/lib/ruby/1.9.1/fileutils.rb:1372 :in `copy_stream` /usr/local/lib/ruby/1.9.1/fileutils.rb:1372 :in `block (2 levels) in copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:1371 :in `open` /usr/local/lib/ruby/1.9.1/fileutils.rb:1371 :in `block in copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:1370 :in `open` /usr/local/lib/ruby/1.9.1/fileutils.rb:1370 :in `copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:477 :in `copy_file` /usr/local/lib/ruby/1.9.1/fileutils.rb:396 :in `block in cp` /usr/local/lib/ruby/1.9.1/fileutils.rb:1515 :in `block in fu_each_src_dest` /usr/local/lib/ruby/1.9.1/fileutils.rb:1531 :in `fu_each_src_dest0` /usr/local/lib/ruby/1.9.1/fileutils.rb:1513 :in `fu_each_src_dest` /usr/local/lib/ruby/1.9.1/fileutils.rb:395 :in `cp` [GEM_ROOT]/gems/paperclip-4.2.0/lib/paperclip/io_adapters/abstract_adapter.rb:41 :in `copy_to_tempfile` [GEM_ROOT]/gems/paperclip-4.2.0/lib/paperclip/io_adapters/uploaded_file_adapter.rb:8 :in `initialize`

我不明白为什么因为/tmp目录所在的分区有足够的可用空间:

Filesystem Size Used Avail Use% Mounted on rootfs 9.9G 4.9G 4.6G 52% /

Apache配置中没有文件大小限制。

1 个答案:

答案 0 :(得分:2)

我快速查看回形针来源。似乎文件内容被复制,因此它在磁盘上存在2次。 (错误跟踪也显示它)

因此,为了能够使用1.8G文件,您需要至少3.6G的可用空间。如果同时上传了一个500M文件(或者如果有另一个副本,那么)你没有足够的磁盘空间。

为了能够调整所需的存储空间,您需要跟踪框架处理上传文件的方式。