Spork and Guard EADDRINUSE

Я создаю приложение для рельсов и использую Spork/Guard/Rspec для тестирования.

Я на Mac (10.6.8) — вот драгоценные камни, которые я использую:

gem "rspec-rails", "~> 2.12.1"   
gem "guard-rspec", "~> 2.3.3"   
gem "guard-spork", "~> 1.4.1"   
gem "spork", "~> 0.9.2"   
gem 'rb-fsevent', '~> 0.9.1', :require => false   
gem "growl", "~> 1.0.3"  
gem 'capybara', '1.1.2'

Когда я редактирую свой файл маршрутов, он должен перезапустить сервер spork, вот строка в моем Guardfile:

guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' }, :foreman => true do
  watch('config/routes.rb')
end

Но недавно я просто начал получать следующую ошибку, когда добавляю новый маршрут:

Loading Spork.prefork block...
Rack::File headers parameter replaces cache_control after Rack 1.5.
Address already in use - bind(2) (Errno::EADDRINUSE)
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:861:in `initialize'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:861:in `open'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:861:in `open_server'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:759:in `block in open_server'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:757:in `each'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:757:in `open_server'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:1342:in `initialize'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:1624:in `new'
/Users/cyrus/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/drb/drb.rb:1624:in `start_service'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/gems/spork-0.9.2/lib/spork/server.rb:29:in `listen'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/gems/spork-0.9.2/lib/spork/server.rb:20:in `run'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/gems/spork-0.9.2/lib/spork/runner.rb:75:in `run'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/gems/spork-0.9.2/lib/spork/runner.rb:10:in `run'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/gems/spork-0.9.2/bin/spork:10:in `<top (required)>'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/bin/spork:23:in `load'
/Users/cyrus/.rvm/gems/ruby-1.9.3-p125@h/bin/spork:23:in `<main>'

Обычно, когда spork загружается, я получаю следующее:

Loading Spork.prefork block...
Rack::File headers parameter replaces cache_control after Rack 1.5.
Spork is ready and listening on 8989!

Как избежать этой ошибки?


person Cyrus    schedule 10.01.2013    source источник


Ответы (3)


Я пришел сюда с той же проблемой, что и ОП.

Спустившись в кроличью нору сообщения «ошибка — это ошибка» и изучив строку кода, в которой произошел сбой, я перезагрузился из-за разочарования. После этого я понял, что блокировка порта, вероятно, возникла из-за того, что я вышел из предыдущего сеанса рабочего стола, и что сервер Spork DRb зависает RubyMine при закрытии, так что, возможно, это то, что оставляет порт открытым.

Конечно, теперь я мог запустить сервер Spork.

Я добавляю это, чтобы другие люди, столкнувшиеся с этой проблемой, могли подумать, соответствует ли она их ситуации.

person Derrell Durrett    schedule 08.03.2013

Удалив :foreman => true в Guardfile, я смог избавиться от этой проблемы. Прямо сейчас я не осмысленно использую значения в моем файле .env в своих тестах, так что все должно быть в порядке, но я отправляю вопрос на Github.

person Cyrus    schedule 12.01.2013

Похоже, эта ошибка является ошибкой: https://github.com/rails/rails/pull/8812

person michael    schedule 14.01.2013