Máy chủ web mỏng: `start_tcp_server ': không có trình chấp nhận (RuntimeError) sau khi kiểm tra chi nhánh git


110

Một ứng dụng Rails 3.2.0, hoạt động tốt với máy chủ web Thin, cả cục bộ và trên ngăn xếp cây tuyết tùng Heroku.

Sau:

$ git branch work
$ git checkout work
$ rails server

Tôi có:

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

Ngoài ra, khi tôi làm:

sudo bundle exec rails server thin -p 3000

Tôi có:

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

Tôi đã cài đặt Bundler 1.0.22. Đã cập nhật và cài đặt nó. Dường như không có gì hoạt động. Có ý kiến ​​gì không?


1
Bạn đã có một máy chủ đang chạy ở nơi khác trên máy chưa? Có lẽ trong Cucumber hay gì đó?
Josh Leitzel

1
Không, tôi chưa. Trên thực tế, việc khởi động lại máy tính đã giải quyết được vấn đề của tôi. Hôm nay nó lại xảy ra. Có vẻ như xảy ra khi tôi chuyển từ nhánh git này sang nhánh git khác.
maeseele

2
Cảm ơn! Thông báo lỗi của tôi trên MacOSX là ... eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError).
JJD

Tương tự đối với tôi khi tôi cố gắng sử dụng cùng một cổng để chạy hai ứng dụng khác nhau. Chủ đề này chỉ khiến tôi nghĩ về ứng dụng đang chạy khác.
Vadorequest

Câu trả lời:


226

Điều này làm việc cho tôi. Máy chủ tìm (zombie?) (Có thể xảy ra khi thoát thiết bị đầu cuối khi máy chủ đang chạy):

$ ps ax | grep rails

Nếu nó trả về một cái gì đó như:

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

giết nó và chạy lại:

$ kill -9 33240
$ rails s

17
Nếu ps ax | grep railskhông thấy gì, hãy thử ps ax | grep ruby.
Kevin

3
Chắc chắn xảy ra trên OSX nếu bạn thoát ngay khỏi cửa sổ đầu cuối trong khi máy chủ rails đang chạy. +1
notaceo


48

Nếu có bất kỳ quá trình nào khác khóa cổng, bạn có thể tìm hiểu xem nó có PID nào như sau:

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

Sau đó, chỉ cần giết nó / chúng:

$ kill -9 40466
$ kill -9 40467

ntopđang sử dụng cổng 3000 trên máy của tôi. Câu trả lời là ngay tại chỗ.
Tass

47

pgrep ruby để xem máy chủ nào đang chạy và sau đó

kill -9 serverNumber

;)



6

Tôi gặp lỗi này vì tôi đang chạy rails-dev-box với Rails bên trong nó.

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.

Vì vậy, đã đăng xuất khỏi Vagrant và tắt nó:

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

Điều đó đã giúp tôi.


Tôi đã từng gặp vấn đề tương tự. Tôi đã chạy lang thang từ một dự án riêng biệt. Có lẽ không phổ biến, nhưng nó đã giúp tôi. Cảm ơn! +1
jake

5

Tôi gặp lỗi này vì tôi đã chạy đường ray trong một thiết bị đầu cuối khác. Đóng dự án khác của tôi đã sửa lỗi này.


1
Nếu bạn muốn chạy cả hai chương trình cùng một lúc, bạn có thể khởi động máy chủ thứ hai của mình trên một cổng khác.
Kevin

@Kevin điểm tuyệt vời. Đó không phải là tôi đang cố gắng làm, tôi đã quên rằng dự án khác đang chạy.
aarona

@DJ Điều đó có lý. Tôi đã đăng nhận xét của mình cho các độc giả trong tương lai :)
Kevin

2

Tôi gặp phải vấn đề tương tự sau khi trở lại văn phòng sau kỳ nghỉ. Tôi chạy máy chủ của mình trên IP cục bộ là:

rails s thin -b <my_ip>

Vấn đề là IP của tôi đã thay đổi, tôi chỉ cần sử dụng cái mới.


2

Thực thi điều này trong thiết bị đầu cuối

sudo netstat -lpn |grep rails

Và sau đó

sudo kill <job id>

Đây là cách duy nhất tôi có thể tìm thấy các quy trình của mình, mặc dù tôi phải tra cứu cho mỏng thay vì đường ray.
chảo trộm

Có, nó hoạt động hầu hết các trường hợp. Nếu bạn thích hãy bình chọn
Sam

Tìm và giết id quy trình đã thực hiện một mẹo nhỏ. Mặc dù lệnh đầu tiên không hiệu quả với tôi nhưng ps aux | grep rails.
Francisco Quintero,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.