เซิร์ฟเวอร์กำลังทำงานใน Rails แล้ว


140

เมื่อฉันเริ่มต้นเซิร์ฟเวอร์รางโดยใช้rails sคำสั่งมันกำลังแสดงA server is already running. Check C:/Sites/folder/Pids/Server.pids

เมื่อฉันเปิดไฟล์มันจะแสดงตัวเลข 4 หลักเท่านั้นฉันจะแก้ไขปัญหานี้ได้อย่างไร

FYI

  1. ไม่มีอินสแตนซ์อื่น ๆ ของ Rails cmd ที่กำลังทำงานอยู่ในขณะนี้
  2. ตรวจสอบตัวจัดการงาน แต่cmd.exeแสดงเฉพาะไม่มีกระบวนการอื่นกำลังทำงานอยู่ (ใช้ Windows)

1
ฉันลบ server.pid ออกจาก \ tmp \ pids
user6746262

คำตอบ:


198

ลบไฟล์: C: /Sites/folder/Pids/Server.pids

คำอธิบาย ใน UNIX land อย่างน้อยเรามักจะติดตาม id กระบวนการ (pid) ในไฟล์เช่น server.pid ฉันคิดว่านี่เป็นการทำสิ่งเดียวกันที่นี่ ไฟล์นั้นน่าจะเหลือจากการขัดข้อง


5
ไฟล์นี้ทำอะไรกันแน่และทำให้เกิดสิ่งนี้ .. คุณช่วยอธิบายเพิ่มเติมอีกหน่อยได้
ไหม

11
ขออภัยฉันควรแสดงความคิดเห็นเพิ่มเติม ใน UNIX land อย่างน้อยเรามักจะติดตาม id กระบวนการ (pid) ในไฟล์เช่น server.pid ฉันคิดว่านี่เป็นการทำสิ่งเดียวกันที่นี่ ไฟล์นั้นน่าจะเหลือจากการขัดข้อง
rainkinz

ฉันคิดว่าฉันโคลนจาก Git ดังนั้นคุณคิดว่ามันอาจจะมีสาเหตุหรือไม่? github.com/swapnesh/Add_twitter_bootstrap
swapnesh

1
หลังจากทำสิ่งนี้ฉันยังคงได้รับ "พอร์ตใช้งาน" ในราคา 3000 ใครทราบวิธีแก้ไขปัญหานี้บ้าง ขอบคุณ!
daveomcd

5
เรียกใช้netstat -a -oที่พรอมต์คำสั่งเพื่อดูว่ากระบวนการใดใช้พอร์ต 3000
Rory

182

TL; DR เพียงแค่รันคำสั่งนี้เพื่อฆ่ามัน

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

สาเหตุหลัก: เนื่องจาก PID ถูกล็อกในไฟล์และเว็บเซิร์ฟเวอร์คิดว่าหากมีไฟล์นั้นอยู่แสดงว่ามันกำลังทำงานอยู่ โดยปกติเมื่อเว็บเซิร์ฟเวอร์ปิดไฟล์นั้นจะถูกลบ แต่ในบางกรณีการลบที่เหมาะสมจะไม่เกิดขึ้นดังนั้นคุณต้องลบไฟล์ด้วยตนเอง โซลูชันใหม่

เมื่อคุณวิ่งราง s

=> การบูต WEBrick

=> แอปพลิเคชั่น Rails 4.0.4 เริ่มต้นในการพัฒนาบน http://0.0.0.0:3000

=> เรียกใช้rails server -hสำหรับตัวเลือกการเริ่มต้นเพิ่มเติม

=> Ctrl-C เพื่อปิดเซิร์ฟเวอร์

เซิร์ฟเวอร์กำลังทำงานอยู่ ตรวจสอบ /your_project_path/tmp/pids/server.pid กำลังออก

ดังนั้นวางเส้นทางของคุณไว้ที่นี่ /your_project_path/tmp/pids/server.pid

และลบไฟล์server.pidนี้:

rm /your_project_path/tmp/pids/server.pid

หรือในกรณีที่เซิร์ฟเวอร์ของคุณไม่ได้เชื่อมต่อให้ปฏิบัติตามคำแนะนำด้านล่าง:

หากคุณแยกเซิร์ฟเวอร์รางของคุณออกโดยใช้คำสั่ง "ราง -d" แล้ว

ลบรางเซิร์ฟเวอร์แยกโดยใช้คำสั่ง

ps -aef | grep rails

หรือตามคำสั่งนี้

sudo lsof -wni tcp:3000

แล้ว

kill -9 pID

หรือใช้คำสั่งนี้

เพื่อค้นหาและฆ่ากระบวนการตามชื่อพอร์ตที่โปรแกรมนั้นกำลังทำงานอยู่ สำหรับ 3000 แทนที่พอร์ตที่โปรแกรมของคุณกำลังทำงานอยู่

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

โซลูชันเก่า:

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

นอกจากนี้คุณสามารถค้นหาโพสต์นี้สำหรับตัวเลือกเพิ่มเติม Rails Update to 3.2.11 แบ่งการทำงานหลายเซิร์ฟเวอร์


เนื่องจาก PID ถูกล็อกในไฟล์และเว็บเซิร์ฟเวอร์คิดว่าหากมีไฟล์นั้นแสดงว่าไฟล์นั้นทำงานอยู่แล้ว โดยปกติเมื่อปิดเว็บเซิร์ฟเวอร์ไฟล์นั้นจะถูกลบ แต่ในบางกรณีการลบที่เหมาะสมจะไม่เกิดขึ้นดังนั้นคุณต้องลบไฟล์ด้วยตนเอง
Taimoor Changaiz

ระวังสิ่งนี้จะฆ่าเบราว์เซอร์ของคุณหากชี้ไปที่: 3000!
Aeramor

1
โซลูชั่นที่สมบูรณ์แบบสำหรับsudo kill -9 $(lsof -i :3000 -t)
new2cpp

84
lsof -wni tcp:3000

จากนั้นคุณจะเห็นกระบวนการทับทิมและคุณสามารถเรียกใช้

kill -9 processid

คุณควรดำเนินการตามขั้นตอนนี้ทันที

rails s thin

การเรียกใช้หลายกระบวนการดูเหมือนจะไม่ใช่ความคิดที่ดีและจากสิ่งที่ฉันได้อ่านหลาย ๆ คนก็เห็นด้วย ฉันสังเกตเห็นการรั่วไหลของหน่วยความจำจำนวนมากด้วยรางดังนั้นฉันจึงไม่สามารถจินตนาการได้ว่ามีสองกระบวนการทำงานอยู่ ฉันรู้ว่าการทำงานล่วงเวลาหน้าของฉันการรีเฟรชช้าลงเรื่อย ๆ เนื่องจากข้อมูลถูกเก็บไว้ในหน่วยความจำ


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

2
@CalamityAdam Rails มักจะทำงานบนพอร์ต 3000 เขาค้นหากระบวนการตามนั้นและได้รับเฉพาะ PID จากพวกเขา ( -tตัวเลือก) จากนั้นฆ่ากระบวนการโดย PID ที่ดึงข้อมูลนั้น
totymedli

13

คุณสามารถกำจัดกระบวนการนี้ได้โดยการฆ่ามัน:

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

ฉันชอบอันนี้ ดีและกระชับ แต่สมบูรณ์ ไชโย
LunaCodeGirl


5

gem install shutup

จากนั้นไปที่โฟลเดอร์ปัจจุบันของโครงการรางของคุณและเรียกใช้

shutup # สิ่งนี้จะฆ่ากระบวนการ Rails ที่กำลังทำงานอยู่

คุณสามารถใช้คำสั่ง 'shutup' ได้ทุกครั้งที่ต้องการ

DICLAIMER: ฉันเป็นผู้สร้างอัญมณีนี้

หมายเหตุ: หากคุณใช้ rvm ให้ติดตั้งอัญมณีทั่วโลก

rvm @global do gem install shutup

4

เกิดขึ้นเมื่อคุณฆ่ากระบวนการเซิร์ฟเวอร์ของคุณและไฟล์ pid ไม่ได้รับการอัปเดต ทางออกที่ดีที่สุดคือการลบไฟล์Server.pid

ใช้คำสั่ง

rm <path to file Server.pid>


3

คุณอาจระงับเซิร์ฟเวอร์โดย: ^Z.

ตัวเลขดิจิทัลสี่ตัวที่vim C:/Sites/folder/Pids/Server.pidsส่งออกคือรหัสกระบวนการ

คุณควรkill -9 processidแทนที่รหัสกระบวนการด้วยตัวเลข 4 ตัวที่ส่งออกเป็นกลุ่ม (หรือตัวแก้ไขอื่น ๆ )


อะไรคือวิธีที่ถูกต้องในการหยุดเซิร์ฟเวอร์อย่างถูกต้อง? CTRL + C?
stt106

1

หากคุณใช้ Windows คุณต้องทำเพียงขั้นตอนเดียว คือ 'รางเริ่มต้นใหม่' จากนั้นพิมพ์'ราง'อีกครั้ง คุณพร้อมแล้ว


1

บน Windows Rails 5.2 ให้ลบไฟล์นี้

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

และเรียกใช้

rails s

อีกครั้ง.


1

วิ่ง: fuser -k -n tcp 3000

สิ่งนี้จะฆ่ากระบวนการที่ทำงานที่พอร์ตเริ่มต้น 3000


0

ฉันเพิ่งมีปัญหานี้และลองตั้งค่าเป็นพอร์ตอื่น แต่สิ่งเดียวที่ฉันต้องทำคือลบของฉัน[app_directory]/tmp/pids/server.pidและทุกอย่างก็เรียบร้อยดี


0

วิ่ง:

ใน Ubuntu / linux

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

หรือ

 pkill -9 ruby

หรือ

lsof -wni tcp:3000

kill -9 pid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.