Máy chủ đã chạy trong Rails


137

Khi tôi khởi động máy chủ rails bằng rails slệnh thì nó đang hiển thịA server is already running. Check C:/Sites/folder/Pids/Server.pids

Khi tôi mở tệp, nó chỉ xuất ra một số gồm 4 chữ số để tôi có thể giải quyết vấn đề này như thế nào?

FYI

  1. Không có phiên bản nào khác của Rails cmd đang chạy lần này.
  2. Đã kiểm tra Trình quản lý tác vụ nhưng chỉ cmd.exehiển thị không có quá trình nào khác đang chạy. (sử dụng Windows).

1
Tôi xóa server.pid khỏi \ tmp \ pids
user6746262

Câu trả lời:


195

Xóa tệp: C: /Sites/folder/Pids/Server.pids

Giải thích Trong vùng đất UNIX ít nhất chúng ta thường theo dõi quá trình id (pid) trong một tệp như server.pid. Tôi nghĩ rằng điều này đang làm điều tương tự ở đây. Tập tin đó có lẽ còn sót lại sau một vụ tai nạn.


5
Chính xác thì tập tin này làm gì và nguyên nhân cho việc này .. bạn có thể giải thích thêm một chút không :)
hoán đổi

11
Xin lỗi, tôi nên bình luận thêm. Trong vùng đất UNIX ít nhất chúng ta thường theo dõi id quá trình (pid) trong một tệp như server.pid. Tôi nghĩ rằng điều này đang làm điều tương tự ở đây. Tập tin đó có lẽ còn sót lại sau một vụ tai nạn.
rainkinz

Tôi nghĩ rằng tôi đã sao chép nó từ Git vì vậy bạn có nghĩ rằng nó có thể là một nguyên nhân? github.com/swapnesh/Add_twitter_bootstrap
hoán đổi

1
Sau khi làm điều này, tôi vẫn nhận được "Cổng đang sử dụng" cho 3000. Bất cứ ai cũng biết làm thế nào tôi có thể sửa lỗi này? Cảm ơn!
daveomcd

5
Chạy netstat -a -otại một dấu nhắc lệnh để xem quá trình nào đang sử dụng cổng 3000
Rory

172

TL; DR Chỉ cần chạy lệnh này để giết nó

sudo kill -9 $(lsof -i :3000 -t)

Nguyên nhân gốc: Vì PID bị khóa trong một tệp và máy chủ web nghĩ rằng nếu tệp đó tồn tại thì có nghĩa là nó đã chạy. Thông thường khi đóng máy chủ web, tệp đó sẽ bị xóa, nhưng trong một số trường hợp, việc xóa đúng sẽ không xảy ra nên bạn phải xóa tệp theo cách thủ công Giải pháp mới

khi bạn chạy đường ray

=> Khởi động WEBrick

=> Ứng dụng Rails 4.0.4 bắt đầu trong quá trình phát triển http://0.0.0.0:3000

=> Chạy rails server -hđể có thêm tùy chọn khởi động

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

Một máy chủ đã chạy. Kiểm tra /your_project_path/tmp/pids/server.pid. Thoát

Vì vậy, đặt đường dẫn của bạn được hiển thị ở đây /your_project_path/tmp/pids/server.pid

và xóa tệp server.pid này :

rm /your_project_path/tmp/pids/server.pid

HOẶC Trong trường hợp máy chủ của bạn bị tách ra, hãy làm theo các hướng dẫn bên dưới:

Nếu bạn tách máy chủ rails của bạn bằng cách sử dụng lệnh "rails -d" thì,

Loại bỏ đường ray tách rời máy chủ bằng cách sử dụng lệnh

ps -aef | grep rails

HOẶC bằng lệnh này

sudo lsof -wni tcp:3000

sau đó

kill -9 pID

HOẶC sử dụng lệnh này

Để tìm và giết tiến trình theo tên cổng mà chương trình đó đang chạy. Đối với 3000 cổng thay thế mà chương trình của bạn đang chạy.

sudo kill -9 $(lsof -i :3000 -t)

Giải pháp cũ:

rails s -p 4000 -P tmp/pids/server2.pid

Ngoài ra, bạn có thể tìm thấy bài đăng này để có thêm tùy chọn Rails Update lên 3.2.11 ngắt chạy nhiều máy chủ


bởi vì PID bị khóa trong tệp và máy chủ web nghĩ rằng nếu tệp đó tồn tại thì có nghĩa là nó đã chạy. Thông thường khi đóng máy chủ, tệp đó sẽ bị xóa, nhưng trong một số trường hợp, việc xóa thích hợp không xảy ra nên bạn phải xóa tệp theo cách thủ công
Taimoor Changaiz

Cẩn thận điều này cũng sẽ giết trình duyệt của bạn nếu nó trỏ đến: 3000!
Aeramor

1
giải pháp hoàn hảo chosudo kill -9 $(lsof -i :3000 -t)
new2cpp

84
lsof -wni tcp:3000

Sau đó, bạn sẽ thấy quá trình ruby ​​và bạn có thể chạy

kill -9 processid

bạn nên chạy tốt quy trình ngay bây giờ

rails s thin

chạy nhiều tiến trình dường như không phải là một ý tưởng hay và từ những gì tôi đã đọc, nhiều người đồng ý. Tôi đã nhận thấy nhiều rò rỉ bộ nhớ với đường ray không may vì vậy tôi không thể tưởng tượng được có hai quá trình đang chạy. Tôi biết với một giờ làm thêm, trang của tôi làm mới ngày càng trở nên chậm hơn do dữ liệu được lưu trữ trên bộ nhớ.


27
kill -9 $(lsof -i tcp:3000 -t)

2
@CalamityAdam Rails thường chạy trên cổng 3000. Anh ta tìm kiếm các quy trình dựa trên đó và chỉ nhận được PID từ chúng ( -ttùy chọn) và sau đó giết quá trình bằng cách lấy ra PID đó.
totymedli

13

Bạn có thể thoát khỏi quá trình bằng cách giết nó:

kill -9 $(lsof -i tcp:3000 -t)

Tôi thích cái này. Đẹp và súc tích, nhưng đầy đủ. Chúc mừng.
LunaCodeGirl

11
$ lsof -wni tcp:3000

# Kill the running process
$ kill -9 5946

$ rm tmp/server.pids

quản đốc bắt đầu vv bắt đầu dịch vụ


4

Nó xảy ra khi bạn giết tiến trình máy chủ của bạn và tệp pid không được cập nhật. Giải pháp tốt nhất là xóa tệp Server.pid .

Sử dụng lệnh

rm <path to file Server.pid>


4

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

3

Có thể bạn đã treo máy chủ bằng cách: ^Z .

Bốn số kỹ thuật số vim C:/Sites/folder/Pids/Server.pidsđầu ra là id quá trình.

Bạn nên kill -9 processid, thay thế id quá trình bằng 4 số mà vim (hoặc trình soạn thảo khác) xuất ra.


Cách đúng đắn để dừng máy chủ đúng cách? CTRL + C?
stt106

1

Nếu bạn đang ở trên Windows, bạn chỉ cần thực hiện một bước là 'rails restart' và sau đó gõ lại 'rails s' Bạn rất tốt để đi.


1

Trên Windows Rails 5.2, xóa tệp này

c:/Sites/<your_folder>/tmp/pids/server.pid

và chạy

rails s

lần nữa.


1

Chạy: fuser -k -n tcp 3000

Điều này sẽ giết quá trình chạy ở cổng 3000 mặc định.


0

Tôi chỉ gặp vấn đề này và cố gắng đặt nó sang một cổng khác, nhưng điều duy nhất tôi cần làm là xóa dữ liệu của mình [app_directory]/tmp/pids/server.pidvà mọi thứ đều ổn.


0

Chạy:

trong Ubuntu / linux

 sudo rm /var/www/html/rails/WBPOCTEST/tmp/pids/server.pid

Hoặc là

 pkill -9 ruby

hoặc là

lsof -wni tcp:3000

kill -9 pid
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.