Server web tipis: `start_tcp_server ': tidak ada penerima (RuntimeError) setelah checkout cabang git


110

Aplikasi Rails 3.2.0, bekerja dengan baik dengan web server Thin, baik secara lokal maupun pada tumpukan cedar Heroku.

Setelah:

$ git branch work
$ git checkout work
$ rails server

Saya mendapat:

=> 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>'

Juga, ketika saya melakukannya:

sudo bundle exec rails server thin -p 3000

Saya mendapat:

/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>'

Saya memiliki bundler 1.0.22 diinstal. Memperbarui dan menginstalnya. Sepertinya tidak ada yang berhasil. Ada ide?


1
Apakah Anda sudah memiliki server yang berjalan di tempat lain di mesin? Mungkin di Mentimun atau sesuatu?
Josh Leitzel

1
Tidak, saya belum. Sebenarnya, memulai ulang komputer telah menyelesaikan masalah saya. Hari ini terjadi lagi. Tampaknya terjadi ketika saya beralih dari satu cabang git ke cabang lain.
maeseele

2
Terima kasih! Pesan kesalahan saya di MacOSX adalah ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD

Sama untuk saya ketika saya mencoba menggunakan port yang sama untuk menjalankan dua aplikasi berbeda. Topik ini membuat saya berpikir tentang aplikasi lain yang sedang berjalan.
Vadorequest

Jawaban:


226

Ini berhasil untuk saya. Temukan server (zombie?) (Dapat terjadi saat keluar dari terminal dengan server berjalan):

$ ps ax | grep rails

Jika mengembalikan sesuatu seperti:

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

bunuh itu, dan jalankan lagi:

$ kill -9 33240
$ rails s

17
Jika ps ax | grep railstidak menemukan apa pun, coba ps ax | grep ruby.
Kevin

3
Pasti terjadi di OSX jika Anda langsung keluar dari jendela terminal saat server rel sedang berjalan. +1
notaceo


48

Jika ada proses lain yang mengunci port, Anda dapat mengetahui PID mana yang dimilikinya seperti ini:

$ 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)

Kemudian bunuh saja / mereka:

$ kill -9 40466
$ kill -9 40467

ntopmenggunakan port 3000 di komputer saya. Jawabannya tepat.
Tass

47

pgrep ruby untuk melihat server apa yang sedang berjalan dan kemudian

kill -9 serverNumber

;)



6

Saya mengalami kesalahan ini karena saya menjalankan rails-dev-box dengan Rails di dalamnya.

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.

Jadi keluar dari Vagrant dan mematikannya:

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

Itu membantu saya.


Saya memiliki masalah yang sama. Saya memiliki gelandangan lari dari proyek terpisah. Mungkin tidak umum, tapi itu membantu saya. Terima kasih! +1
jake

5

Saya mengalami kesalahan ini karena saya sudah menjalankan rel di terminal lain. Menutup proyek saya yang lain memperbaiki ini.


1
Jika Anda ingin menjalankan kedua program sekaligus, Anda dapat menjalankan server kedua di port yang berbeda.
Kevin

@Sukabumi_sukabumi Bukan itu yang saya coba lakukan, hanya lupa bahwa proyek lain sedang berjalan.
aarona

@DJ Itu masuk akal. Saya memposting komentar saya untuk pembaca selanjutnya :)
Kevin

2

Saya mengalami masalah serupa setelah kembali ke kantor dari liburan. Saya menjalankan server saya di IP lokal sebagai:

rails s thin -b <my_ip>

Masalahnya adalah IP saya telah berubah, saya hanya perlu menggunakan yang baru.


2

Jalankan ini di terminal

sudo netstat -lpn |grep rails

Lalu

sudo kill <job id>

Ini adalah satu-satunya cara saya dapat menemukan proses saya, meskipun saya harus mencari thin, bukan rel.
pencuri wajan

Ya, ini berfungsi pada sebagian besar kasus. Jika Anda menyukai voting, silakan.
Sam

Menemukan dan mematikan id proses melakukan triknya. Meskipun perintah pertama tidak berhasil untukku tapi ps aux | grep rails.
Francisco Quintero
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.