RSpec and Machinist error: Too many open files
Asked Answered
C

1

8

This morning I am having the following error:

  14) Deal on creation sets frozen to false or nil
     Failure/Error: Unable to find matching line from backtrace
     Errno::EMFILE:
       Too many open files - identify -format %wx%h '/var/folders/BJ/BJcTANEBFxWcan28U2YEKE+++TI/-Tmp-/stream20120229-36866-4l1sa8.gif[0]'
     # ./spec/support/blueprints.rb:29:in `block in <top (required)>'

Specs are so damn slow (even with spork) so they are useless. It takes 9 minutes to run 20 examples in a model. Line 29 in blueprint.rb is between the following blocks:

Company.blueprint do
  name { "Office Tronic#{rand(10 ** 10)}" }
  website { 'officetronic.com' }
  subdomain {"officetronic#{rand(10 ** 10)}"}
  facebook { 'officetronic' }
  twitter { 'officetronic' }
  description { 'We are a company dealing with electronics and office supply' }
  address_line1 {'34 John Street'}
  address_line2 {''}
  post_code { 'EC2 3RR' }
  phone { '01 343243434' }
  city { 'London' }
  your_name { 'john Doe' }
  font_colour {'000000'}
  logo_file_name { 'mylogo.png' }  
  logo_content_type { "application/png" }
  logo_file_size { 100 }
end

Deal.blueprint do
  company {Company.make!}
  title { '50% off for web sites dev' }
  description { '50% of discount...' }
  quantity { 1 }
  min_quantity { 0 }
  start_time { Chronic.parse('one month') }
  end_time { Chronic.parse('two months') }
  price { 1500 } # in cents
  shipping_cost{ 100 } # in cents
  published { true }
  small_print { 'Some text' }
  show_map { true }
  post_code { 'E1 6BJ' }
  rrp {15}
end
Chime answered 29/2, 2012 at 12:43 Comment(1)
I realised that this error happens when using spork: rspec --drb spec/models/deal_spec.rbChime
J
16

Too many open files is an OS error, meaning that the OS has run out of file handles. Linux usually has a hard limit on how many files can be open at the same time, and that limit has been reached.

To increase the limit temporarily, run ulimit -n 8192 first and then run the specs.

To increase the limit permanently, follow these instructions, and substitute nginx with the name of the user account that you're using to run the specs.

Jenniejennifer answered 26/5, 2013 at 13:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.