ruby-on-rails - "Errno::EMFILE: Too many open files"创建本地镜像

标签 ruby-on-rails rspec paperclip

在 Rails 中创建对象时,我想自动为它分配 Assets 目录中的库存图像,以后可以由用户覆盖。

结果,我在创建对象时执行以下私有(private)方法:

def save_stock_image
  image_path = Dir.glob(<list-of-images-from-directory>).sample

  File.open(image_path) do |file|
    self.image = file
    self.save!
  end
end

但是,经过 6 次 RSpec 测试后,我开始收到以下错误:
Failure/Error: let(:object) { create(:object) }
Errno::EMFILE:
  Too many open files - /tmp/16020130822-36578-q8j9v9.jpg
# ./app/models/object.rb:502:in `block in save_stock_image'
# ./app/models/object.rb:501:in `open'
# ./app/models/object.rb:501:in `save_stock_image'
# ./spec/controllers/object_controller_spec.rb:318:in `block (3 levels) in <top (required)>'
# ./spec/controllers/object_controller_spec.rb:344:in `block (4 levels) in <top (required)>'

上述错误出现在 60 次测试中的 40 次左右。我查看了一些 SO 问题,以及 https://github.com/thoughtbot/paperclip/issues/1122https://github.com/thoughtbot/paperclip/issues/1000 .我能找到的最接近的答案是确保文件描述符正在关闭。在我使用 File.open 之前在 block 中,我用 file.close 明确关闭了文件- 这也不起作用。

有什么明显的我做错了吗?有没有更好的方法来完成我想要做的事情?

更新

看起来它与 Paperclip 在上传到 S3 之前创建的临时文件有关。关闭那些我丢失的临时文件有什么问题吗?

最佳答案

我自己也遇到了这个。看起来主分支有一个修复。在这里查看我的评论:

https://github.com/thoughtbot/paperclip/issues/1326?source=cc

关于ruby-on-rails - "Errno::EMFILE: Too many open files"创建本地镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18393580/

相关文章:

ruby - RSpec 在带参数的方法上测试 ArgumentError

ruby-on-rails - Poltergeist/Capybara 测试无法间歇性地找到 CSS

ruby-on-rails - 无法上传图像(回形针)和 jquery mobile

ruby-on-rails - rails 设计 : Set password reset token and redirect user

ruby-on-rails - Rails 应用程序处理 CSS 的方式不同吗?

ruby-on-rails - 将 Rails 部署为桌面应用程序

ruby-on-rails - Ruby on Rails ActiveRecord 数据流

ruby-on-rails - 为 seeds.rb 编写规范

javascript - 如何从浏览器触发扫描仪?

ruby-on-rails - 在 Rails 应用程序中使用 Paperclip 显示附件列表