Không thể dừng máy chủ rails


126

Tôi chưa quen với đường ray và tôi đang sử dụng máy ubfox và IDE rubymine. Vấn đề là tôi không thể dừng máy chủ rails. Tôi đã cố gắng ngăn chặn máy chủ bằng cách giết quá trình đường ray. Nhưng, khi tôi chạy pgrep -l rails, không có quá trình như vậy được tìm thấy. Vì vậy, tôi chỉ có thể giết các quá trình ruby, nhưng, máy chủ sẽ không dừng lại.

Tôi đã thử ./script/server stop(vì tôi đã khởi động nó bằng cách chạy ./script/server start), nhưng, nó không hoạt động. Googling xung quanh và tìm thấy một số bài đăng stackoverflow, tôi đã cố gắng thay đổi cổng nghe của cổng localhost nhưng không thành công. Ai đó có thể giúp đỡ?


2
=> Ctrl-C để tắt máy chủ
gabrielhilal

@Newben bạn có muốn giết tất cả quá trình không?
Học viên

@Sri, vâng, tôi muốn giết tất cả quá trình
epsilones

1
@Newben Kiểm tra câu trả lời được cập nhật của tôi bên dưới và dùng thử và cho tôi biết
Người học

Câu trả lời:


303

Bạn có thể sử dụng các cổng khác như sau:

rails server -p 3001

Thông thường trong thiết bị đầu cuối của bạn, bạn có thể cố gắng Ctrl + Ctắt máy chủ.

Một cách khác để giết máy chủ mặc định của Ruby on Rails WEBricklà:

kill -INT $(cat tmp/pids/server.pid)

Trong thiết bị đầu cuối của bạn để tìm ra PID của quá trình:

$ lsof -wni tcp:3000

Sau đó, sử dụng số trong cột PID để giết tiến trình:

Ví dụ:

$ kill -9 PID

Và một số câu trả lời khác tôi tìm thấy là:

Để dừng máy chủ rails trong khi nó đang chạy, nhấn:

CTRL-C
CTRL-Z

Bạn sẽ có được quyền kiểm soát trở lại bash. Sau đó nhập (không có $):

$ fg

Và điều này sẽ quay trở lại vào quá trình, và sau đó thoát ra khỏi Rails sđúng cách.

Hơi khó chịu một chút, nhưng điều này chắc chắn sẽ đánh bại quá trình này bằng tay. Nó không quá tệ và đó là điều tốt nhất tôi có thể tìm ra.

Cập nhật câu trả lời:

Bạn có thể sử dụng killall -9 railsđể tắt tất cả các ứng dụng đang chạy có " rails" trong tên.

killall -9 rails


Xin lỗi, lsof -wni tcp: 3000 không trả về gì cả và tôi không có bất kỳ thư mục tmp / pids / nào
epsilones

Nếu Webrick đang chạy, thì PID của nó nằm trong {APP_ROOT}/tmp/pids/server.pidtệp để bạn không phải tìm kiếm nó - miễn là máy chủ đang chạy. Vì vậy, nếu thay vì làm ctrl-cbạn chỉ cần chạy lệnh kill đó trong một thiết bị đầu cuối khác, nó sẽ giết máy chủ Webrick ngay lập tức.
Học viên

Khi tôi chạy killall -9 rails, tôi nhận được thông báo 'không tìm thấy quá trình như vậy' ??
epsilones

Btw, thư mục {APP_ROOT} / tmp / pids / thực sự tồn tại nhưng nó trống rỗng
epsilones

1
Không ai trong số các lệnh này làm bất cứ điều gì cho tôi. Tuy nhiên, khởi động lại máy đã khắc phục sự cố.
Herb Meehan

51

bạn có thể sử dụng lệnh grep theo cách sau,

ps aux | grep rails

và sau đó

kill -9 {process_id} 

thực tế, dấu phẩy này chỉ bắt được '0:00 grep --color = auto rails', mà tôi đoán là lệnh grep được gọi là ...
epsilones

Cảm ơn giải pháp này làm việc cho máy chủ vẫn chạy ngay cả khi thiết bị đầu cuối đóng. Nice
ksugiarto 14/11/13

Và nếu tôi có nhiều quy trình và tôi không muốn giết từng cái một cách thủ công thì sao?
Nickolay Kondratenko

Bạn có thể tiêu diệt tất cả bọn chúng bằng cáchkillall -9 rails
maximus

để tìm máy chủ tôi phải làmps aux | grep puma
Sami Birnbaum

27

pkill -9 rails để giết tất cả quá trình đường ray

Cập nhật câu trả lời

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

Điều này sẽ giết bất kỳ quá trình đường ray chạy. Thay thế 'đường ray' bằng một cái gì đó khác để giết bất kỳ quá trình nào khác.


18

Sau đây là các bước để giết quá trình máy chủ:

1. lsof -i tcp:3000

2. kill -9 1234

Trường hợp 1234PID của quá trình: localhost: 3000 hiển thị ở bước 1.

HOẶC LÀ

Xóa tệp (server.pid) bên dưới Rails.root/tmp/pids/và khởi động lại máy chủ.

HOẶC LÀ

mở ứng dụng trong một cổng khác bằng cách sử dụng lệnh:

rails s -p 3001



10

Tôi thường sử dụng:

killall ruby

HOẶC LÀ

pkill -9 ruby

đó sẽ giết chết tất cả các quy trình liên quan ruby đang chạy như rails server, rails consolevv


Nếu bạn không biết pkill -9 hoặc kill -9, cũng có thể đáng chú ý rằng điều này cũng có thể giết chết các quá trình ruby ​​khác, ví dụ như IDE rubymine.
Kjell

4

1. Chỉ cần xóa tệp pid khỏi thư mục ứng dụng rails

Rails_app -> tmp -> pids -> pid file

Xóa tập tin và chạy

rails start


2. Đối với Rails 5.0 trở lên, bạn có thể sử dụng lệnh này

rails restart


3

Sử dụng ctrl+cđể tắt Máy chủ Webrick của bạn.

Thật không may nếu nó không hoạt động sau đó đóng mạnh thiết bị đầu cuối và khởi động lại nó.

Một mẹo khác là

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process

thậm chí bạn đã khởi động lại đôi khi máy chủ đang chạy. Bởi vì chúng ta cần phải giết temp / pid để dừng máy chủ
Người học

Nhưng thông thường, việc kết thúc thiết bị đầu cuối sẽ dừng quá trình bcoz quy trình tiền cảnh của nó và chạy trên thiết bị đầu cuối.
Gopal S Rathore

3

Xóa server.pid khỏi thư mục tmp / pids. Trong trường hợp của tôi, lỗi là: Một máy chủ đã chạy. Kiểm tra /home/sbhatta/myapp/tmp/pids/server.pid.

Vì vậy, tôi xóa server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid sau đó chạy rails s


3

Bước 1: tìm các mục đang tiêu thụ 3000 cổng.

lsof -i:3000

Bước 2: Tìm quy trình có tên

Dành cho máy Mac

ruby      TCP localhost:hbci (LISTEN)

Dành cho Ubuntu

ruby      TCP *:3000 (LISTEN)

Bước 3: Tìm PID của quá trình và giết nó.

kill -9 PID


2

Tôi đã sử dụng killall -9 railsnhư Sri đề nghị và nó không hoạt động. Tôi điều chỉnh lệnh killall -9 rubyvà máy chủ đóng ngay lập tức.

Tl; dr: killall -9 ruby



1

Khi máy chủ rails không khởi động, điều đó có nghĩa là nó đã chạy rồi, bạn có thể bắt đầu bằng cách sử dụng cổng mới, vd.

rails s -p 3001

hoặc nó bắt đầu và dừng trong trường hợp đó bạn muốn xóa thư mục tạm thời trong cấu trúc thư mục rails, nó khởi động máy chủ rails.


1

kiểm tra /tmp/tmp/server.pid

Có một cái lỗ bên trong.

Thông thường, tôi không làm "giết -9 THE_PID" trong cmd


Tôi không có đường dẫn này, nó có thể ở đâu trên máy ubfox?
epsilones

nó bị ẩn ... hãy vào thư mục ứng dụng của bạn, ctrl + H để hiển thị các tệp bị ẩn của bạn, sau đó bạn có thể thấy nó
Nich

1

Tôi đã nhận thấy trên Windows (Tôi đang sử dụng 10 nhưng không chắc chắn nếu giống với oler). Nếu bạn sử dụng cmd.exe và ctrl + c, máy chủ raisl dừng chính xác.

Tuy nhiên, nếu bạn sử dụng Git Bash, thì không. Nó nói nó có nhưng khi bạn nhìn vào các nắp tmp, nó vẫn ở đó.

Có lẽ một lỗi với git bash?


1

killall -9 rubysẽ giết tất cả các quy trình ruby, và ít nhất trên máy của tôi, các máy chủ rails xuất hiện dưới dạng các quy trình ruby. killall -9 railscụ thể hơn nhiều và không hoạt động đối với các phiên bản cũ hơn của máy chủ rails (nó cung cấp 'đường ray: không tìm thấy quy trình' vì quy trình được đặt tên là ruby)

Gặp phải vấn đề này một thời gian trước. Sau khi gửi biểu mẫu trong activeadmin, máy chủ rails chỉ bị treo và tôi không thể giết nó bằng các phương tiện thông thường (ngay cả sau khi ctrl + z nó vẫn chạy trong nền). Câu trả lời của người học đã giúp, nhưng lệnh này không cần id quá trình.


0

Nó là muộn cho câu hỏi này. Đây là 2 xu của tôi. Tôi đã thực hiện một nhiệm vụ cào để dừng máy chủ khi tôi không có quyền truy cập vào nó. Tôi chỉ thử nghiệm trên Mac mặc dù.

Với điều này, bạn có thể chỉ cần thêm nó vào dự án của bạn sau đó chạy lệnh rake.

Ở đây bạn đi:

Liên kết Gist: phiên bản mới nhất sẽ ở đây. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Một số mã ở đây:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`

0

Ngoài ra, hãy chắc chắn rằng bạn đang thực hiện lệnh Cntrl + C trong cùng một thiết bị đầu cuối (tab) được sử dụng để khởi động máy chủ.

Trong trường hợp của tôi, tôi có 2 tab nhưng tôi quên dừng máy chủ từ tab chính xác và tôi đã tự hỏi tại sao Cntrl + C không hoạt động.


0

Một cách siêu dễ dàng sẽ là

gem install shutup

sau đó vào thư mục hiện tại của dự án đường ray của bạn và chạy

shutup # điều này sẽ giết quá trình Rails hiện đang chạy

Bạn có thể sử dụng lệnh 'shutup' mỗi khi bạn muốn

DICLAIMER: Tôi là người tạo ra viên ngọc này

LƯU Ý: nếu bạn đang sử dụng rvm, hãy cài đặt gem trên toàn cầu

rvm @global do gem install shutup

0

Đối với máy windows 10 của tôi, Ctrl - C+ Ctrl - Dhoạt động.


0

Chúng tôi có thể giết phiên rails trên Linux bằng PORT no

fuser -k 3000/tcp 

3000 ở đây là một cổng không. Bây giờ khởi động lại máy chủ của bạn, bạn sẽ thấy máy chủ của bạn đang ở trạng thái chạy.


0

Thực hiện theo các bước sau:

  1. mở dự án của bạn
  2. chọn trong thư mục tmp
  3. chọn thư mục pids
  4. xóa tập tin server.pid
  5. bây giờ bắt đầu máy chủ rails của bạn

Không hoạt động trên ứng dụng rails 5.2 của tôi. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

0
  1. Chỉ cần mở tệp bằng vị trí đã cho sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. tìm process_id / thread_id tại đó tiến trình đang chạy.

  3. Giết quá trình / luồng đã chỉ định bằng cách sử dụng kill -9 84699


0

Trên đường ray 6 bằng cách sử dụng

ps aux | grep rails đã không trả lại quá trình máy chủ

tôi phải làm

ps aux | grep puma

để tìm quá trình thực tế và sau đó giết nó bằng cách sử dụng

kill -9 {process_id}


0

Nếu bạn đang sử dụng phiên bản Rails hiện đại hơn và nó sử dụng Puma làm máy chủ web, bạn có thể chạy lệnh sau để tìm quy trình Puma bị kẹt:

ps aux | grep puma

Nó sẽ dẫn đến đầu ra tương tự như thế này:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

Bạn muốn quá trình không đề cập đến grep . Trong trường hợp này, ID tiến trình là 85923.

Sau đó tôi có thể chạy lệnh sau để giết tiến trình đó:

kill -9 85923

nhập mô tả hình ảnh ở đây

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.