Тонкий веб-сервер: `start_tcp_server ': нет акцептора (RuntimeError) после проверки ветки git


110

Приложение Rails 3.2.0, отлично работающее с тонким веб-сервером как локально, так и на кедровом стеке Heroku.

После:

$ git branch work
$ git checkout work
$ rails server

Я получил:

=> Booting Thin
=> Rails 3.2.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Exiting
/Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server': no acceptor (RuntimeError)
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/tcp_server.rb:16:in `connect'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/base.rb:53:in `block in start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/backends/base.rb:61:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/thin-1.3.1/lib/thin/server.rb:159:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/handler/thin.rb:13:in `run'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/server.rb:265:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands/server.rb:70:in `start'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:55:in `block in <top (required)>'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:50:in `tap'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.0/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

Также, когда я это сделаю:

sudo bundle exec rails server thin -p 3000

Я получил:

/Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
from /Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /Users/peter/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
from /Users/peter/.rvm/gems/ruby-1.9.3-p125/bin/bundle:18:in `<main>'

У меня установлен пакет 1.0.22. Обновил и установил. Кажется, ничего не работает. Любые идеи?


1
У вас уже есть сервер, работающий где-либо еще на машине? Может, в огурце или что-то в этом роде?
Джош Лейтцель

1
Нет, не видел. Фактически, перезагрузка моего компьютера решила мою проблему. Сегодня это случилось снова. Кажется, это происходит, когда я переключаюсь с одной ветки git на другую.
maeseele

2
Спасибо! Мое сообщение об ошибке на MacOSX было ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD 03

То же самое для меня, когда я пытался использовать один и тот же порт для запуска двух разных приложений. Эта тема только что заставила меня задуматься о другом запущенном приложении.
Vadorequest

Ответы:


226

У меня это работает. Найти (зомби?) Сервер (может произойти при выходе из терминала при работающем сервере):

$ ps ax | grep rails

Если он вернет что-то вроде:

33467 s002 S+ 0:00.00 grep rails
33240 s003 S+ 0:15.05 /Users/Arta/.rbenv/versions/1.9.2-p290/bin/ruby script/rails s -p 3000

убить его и запустить заново:

$ kill -9 33240
$ rails s

17
Если ps ax | grep railsничего не появится, попробуйте ps ax | grep ruby.
Кевин

3
Определенно произойдет в OSX, если вы сразу закроете окно терминала во время работы сервера rails. +1
notaceo


48

Если какой-либо другой процесс блокирует порт, вы можете узнать, какой у него PID, вот так:

$ lsof -i :3000
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Passenger 40466 josh    5u  IPv4 0x7cae9332073ed4df      0t0  TCP *:hbci (LISTEN)
Passenger 40467 josh    5u  IPv4 0x7cae9332073ed4df      0t0  TCP *:hbci (LISTEN)

Тогда просто убейте его / их:

$ kill -9 40466
$ kill -9 40467

ntopиспользовал порт 3000 на моей машине. Ответ точный.
ТАСС

47

pgrep ruby чтобы увидеть, какие серверы работают, а затем

kill -9 serverNumber

;)



6

У меня эта ошибка, потому что я запускал rails-dev-box с Rails внутри.

Port 3000 in the host computer is forwarded to port 3000 in the virtual machine. 
Thus, applications running in the virtual machine can be accessed via 
localhost:3000 in the host computer.

Итак, вышел из Vagrant и отключил его:

vagrant@rails-dev-box:/vagrant/rails$ exit
$ vagrant halt

Это мне помогло.


У меня такая же проблема. У меня был бродяга из отдельного проекта. Наверное, не часто, но мне это помогло. Спасибо! +1
jake

5

У меня была эта ошибка, потому что я уже запускал рельсы в другом терминале. Закрытие другого моего проекта исправило это.


1
Если вы хотите запустить обе программы одновременно, вы можете запустить второй сервер на другом порту.
Кевин

@ Кевин отличная точка. Я не пытался этого сделать, просто забыл, что работает другой проект.
Аарона

@DJ В этом есть смысл. Я размещал свой комментарий для будущих читателей :)
Кевин

2

Я столкнулся с аналогичной проблемой, вернувшись в офис из отпуска. Я запускаю свой сервер на локальном IP как:

rails s thin -b <my_ip>

Проблема заключалась в том, что мой IP изменился, мне просто нужно было использовать новый.


2

Выполните это в терминале

sudo netstat -lpn |grep rails

А потом

sudo kill <job id>

Это был единственный способ найти свои процессы, хотя мне пришлось искать thin вместо rails.
Skillet-thief

Да, в большинстве случаев это работает. Если вам понравилось, проголосуйте, пожалуйста.
Сэм

Поиск и уничтожение идентификатора процесса помогли. Хотя первая команда у меня не сработала, но ps aux | grep rails.
Франсиско Кинтеро,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.