Тонкий веб-сервер: `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>'

У мене встановлений bundler 1.0.22. Оновили та встановили його. Здається, нічого не працює. Якісь ідеї?


1
У вас уже є сервер, який працює в іншому місці на машині? Можливо, в Огірку чи щось?
Джош Лейтцель

1
Ні, я ні. Власне, перезавантаження мого комп'ютера вирішило мою проблему. Сьогодні це повторилося знову. Здається, це відбувається, коли я перемикаюся з однієї гіткової гілки на іншу.
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

Те саме для мене, коли я намагався використовувати один і той же порт для запуску двох різних додатків. Ця тема просто змусила мене задуматися над іншим запущеним додатком.
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, якщо ви прямо закриєте вікно терміналу під час роботи сервера рейли. +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 із рейками всередині нього.

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
Джейк

5

У мене була ця помилка, оскільки я вже працював з рейки в іншому терміналі. Закриття мого іншого проекту вирішило це.


1
Якщо ви хочете запустити обидві програми одночасно, ви можете запустити другий сервер на іншому порту.
Кевін

@ Кевін чудовий момент. Я цього не намагався зробити, просто забув, що працює інший проект.
aarona

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

2

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

rails s thin -b <my_ip>

Проблема полягала в тому, що мій IP змінився, мені просто потрібно було використовувати новий.


2

Виконайте це в терміналі

sudo netstat -lpn |grep rails

І потім

sudo kill <job id>

Це був єдиний спосіб, коли мені вдалося знайти свої процеси, хоча мені довелося гребнути за тонкі замість рейок.
сковорода-злодій

Так, це працює в більшості випадків. Якщо вам сподобалось голосуйте, будь ласка.
Сем,

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