Tidak dapat menghentikan server rel

126

Saya baru mengenal rails dan saya menggunakan mesin ubuntu dan IDE rubymine. Masalahnya adalah saya tidak dapat menghentikan server rails. Saya mencoba untuk menghentikan server dengan membunuh proses rel. Tetapi, ketika saya menjalankan pgrep -l rails, tidak ada proses seperti itu ditemukan. Jadi, saya hanya dapat membunuh proses ruby, tetapi, server tidak akan berhenti.

Saya mencoba ./script/server stop(sejak saya memulainya dengan berlari ./script/server start), tetapi, itu tidak berhasil. Googling sekitar dan menemukan beberapa posting stackoverflow, saya mencoba untuk mengubah port mendengarkan port localhost tetapi tidak berhasil. Bisakah seseorang membantu?

epsilones
sumber
2
=> Ctrl-C untuk mematikan server
gabrielhilal
@ Newben kamu ingin membunuh semua proses?
Learner
@ Sri, ya saya ingin membunuh semua proses
epsilones
1
@ Newben Periksa jawaban saya yang diperbarui di bawah ini dan cobalah dan beri tahu saya
Learner

Jawaban:

303

Anda dapat menggunakan port lain seperti berikut:

rails server -p 3001

Biasanya di terminal Anda, Anda dapat mencoba Ctrl + Cmematikan server.

Cara lain untuk membunuh server default Ruby on Rails (yaitu WEBrick):

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

Di terminal Anda untuk mengetahui PID proses:

$ lsof -wni tcp:3000

Kemudian, gunakan nomor di kolom PID untuk mematikan proses:

Sebagai contoh:

$ kill -9 PID

Dan beberapa jawaban lain yang saya temukan adalah:

Untuk menghentikan server rails saat sedang berjalan, tekan:

CTRL-C
CTRL-Z

Anda akan mendapatkan kontrol kembali ke bash. Kemudian ketik (tanpa $):

$ fg

Dan ini akan kembali ke proses, dan kemudian berhenti Rails sdengan benar.

Agak menyebalkan, tapi ini pasti mengalahkan prosesnya secara manual. Itu tidak terlalu buruk dan itu yang terbaik yang bisa saya pikirkan.

Jawaban yang diperbarui:

Anda dapat menggunakan killall -9 railsuntuk membunuh semua aplikasi yang berjalan dengan " rails" di namanya.

killall -9 rails

Pelajar
sumber
Maaf, lsof -wni tcp: 3000 tidak mengembalikan apa-apa, dan saya tidak punya folder tmp / pids /
epsilones
Jika Webrick sedang berjalan, maka PID-nya ada di dalam {APP_ROOT}/tmp/pids/server.pidfile sehingga Anda tidak perlu mencarinya - selama server berjalan. Jadi, jika ctrl-cAnda tidak menjalankan perintah kill di terminal lain, itu akan langsung membunuh server Webrick.
Learner
Ketika saya menjalankan killall -9 rails, saya mendapatkan pesan yang mengatakan 'tidak ada proses yang ditemukan' ??
epsilones
Btw, folder {APP_ROOT} / tmp / pids / memang ada tetapi kosong
epsilones
1
Tidak satu pun dari perintah ini yang membantu saya. Namun, me-reboot mesin memperbaiki masalah.
Ramuan Meehan
51

Anda dapat menggunakan perintah grep dengan cara berikut,

ps aux | grep rails

lalu

kill -9 {process_id} 
maximus ツ
sumber
sebenarnya, commnad ini hanya menangkap '0:00 grep --color = auto rails', yang saya kira adalah grep yang disebut perintah ...
epsilones
Terima kasih solusi ini berfungsi untuk server yang masih berjalan meskipun kekuatan terminal ditutup. Bagus
ksugiarto
Dan bagaimana jika saya memiliki banyak proses dan saya tidak ingin membunuhnya secara manual satu per satu?
Nickolay Kondratenko
Anda dapat membunuh mereka semua dengankillall -9 rails
maximus ツ
untuk menemukan server yang harus saya lakukanps aux | grep puma
Sami Birnbaum
27

pkill -9 rails untuk membunuh semua proses rel

Jawaban yang diperbarui

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

Ini akan membunuh proses rel yang berjalan. Ganti 'rel' dengan sesuatu yang lain untuk membunuh proses lainnya.

Vasu Adari
sumber
18

Berikut ini adalah langkah-langkah untuk mematikan proses server:

1. lsof -i tcp:3000

2. kill -9 1234

di mana 1234PID proses: localhost: 3000 tampilan dalam langkah 1.

ATAU

Hapus file (server.pid) di bawah Rails.root/tmp/pids/dan restart server.

ATAU

buka aplikasi di port lain dengan menggunakan perintah:

rails s -p 3001

puneet18
sumber
15

Pada MAC saya killall -9 railstidak berfungsi. Namun killall -9 rubydemikian.

pengguna2055780
sumber
Sama. Itu COMMANDnilainya juga.
IIllIIll
10

Saya biasanya menggunakan:

killall ruby

ATAU

pkill -9 ruby

yang akan membunuh semua proses ruby terkait yang sedang berjalan seperti rails server, rails console, dll

przbadu
sumber
Jika Anda tidak tahu pkill -9 atau kill -9, mungkin perlu diperhatikan bahwa ini juga dapat membunuh proses ruby ​​lainnya, misalnya IDE rubymine.
Kjell
4

1. Cukup Hapus file pid dari direktori app rails

Rails_app -> tmp -> pids -> pid file

Hapus file dan jalankan

rails start


2. Untuk Rails 5.0 ke atas, Anda dapat menggunakan perintah ini

rails restart

Aravin
sumber
3

Gunakan ctrl+cuntuk mematikan Server Webrick Anda.

Sayangnya jika tidak berfungsi maka tutup terminal dengan paksa dan nyalakan kembali.

Trik lain adalah itu

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
Gopal S Rathore
sumber
bahkan u kadang-kadang restart server sedang berjalan. Karena kita perlu mematikan temp / pid untuk menghentikan server
Learner
Tetapi biasanya, menghentikan terminal menghentikan proses karena proses latar depan dan berjalan pada terminal.
Gopal S Rathore
3

Hapus server.pid dari folder tmp / pids. Dalam kasus saya, kesalahannya adalah: Server sudah berjalan. Periksa /home/sbhatta/myapp/tmp/pids/server.pid.

Jadi, saya menghapus server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid lalu lari rails s

Santanu
sumber
3

Langkah 1: cari barang apa saja yang menggunakan 3000 port.

lsof -i:3000

langkah 2: Temukan proses bernama

Untuk Mac

ruby      TCP localhost:hbci (LISTEN)

Untuk Ubuntu

ruby      TCP *:3000 (LISTEN)

Langkah 3: Temukan PID dari proses dan bunuh.

kill -9 PID
errakeshpd
sumber
2

Ctrl-Z biasanya melakukan trik.

himanish.k
sumber
2

Saya menggunakan killall -9 railsseperti yang disarankan Sri dan tidak berhasil. Saya menyesuaikan perintah killall -9 rubydan server segera ditutup.

Tl; dr: killall -9 ruby

Rebecca
sumber
2

sesederhana itu

pkill -9 ruby

tidak lebih tidak kurang

Elta3lab
sumber
1

Ketika server rails tidak memulai itu berarti sudah berjalan maka Anda dapat mulai dengan menggunakan port baru mis.

rails s -p 3001

atau itu mulai dan berhenti dalam hal ini Anda ingin menghapus folder temp di struktur direktori rails ia memulai server rails.

Gajanan
sumber
1

periksa /tmp/tmp/server.pid

ada pid di dalamnya.

Biasanya, saya sakit "kill -9 THE_PID" di cmd

Nich
sumber
Saya tidak memiliki jalur ini, di manakah itu pada mesin ubuntu?
epsilones
itu disembunyikan ... pergi ke folder aplikasi Anda, ctrl + H untuk menunjukkan file tersembunyi Anda, maka Anda dapat melihatnya
Nich
1

Saya perhatikan di Windows (saya menggunakan 10 tetapi tidak yakin apakah sama untuk oler). Jika Anda menggunakan cmd.exe dan ctrl + c server raisl berhenti dengan benar.

Namun, jika Anda menggunakan Git Bash, itu tidak. Ia mengatakan memiliki tetapi ketika Anda melihat pips tmp, itu masih ada.

Mungkin bug dengan git bash?

Brad
sumber
1

killall -9 rubyakan membunuh semua proses ruby, dan setidaknya pada mesin saya, server rails muncul sebagai proses ruby. killall -9 railsjauh lebih spesifik dan tidak bekerja untuk server rail versi lama (ini memberikan 'rails: no process found' karena prosesnya bernama ruby)

Mengalami masalah ini beberapa waktu lalu. Setelah mengirimkan formulir dalam activeadmin, server rel hanya digantung dan saya tidak dapat membunuhnya menggunakan cara normal (bahkan setelah ctrl + z masih berjalan di latar belakang). Jawaban Learner membantu, tetapi perintah ini tidak memerlukan id proses.

Somil Mishra
sumber
0

Sudah terlambat untuk pertanyaan ini. Ini 2 sen saya. Saya membuat tugas menyapu untuk menghentikan server ketika saya tidak memiliki akses ke sana. Saya hanya menguji pada Mac.

Dengan ini, Anda cukup menambahkannya ke proyek Anda kemudian jalankan perintah rake.

Ini dia:

Tautan intisari: - Versi terbaru akan ada di sini. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Beberapa kode di sini:

# 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`
Tuan H
sumber
0

Juga, Pastikan Anda melakukan perintah Cntrl + C di terminal yang sama (tab) yang digunakan untuk memulai server.

Dalam kasus saya, saya memiliki 2 tab tetapi saya lupa untuk menghentikan server dari tab yang benar dan saya bertanya-tanya mengapa Cntrl + C tidak berfungsi.

Abu
sumber
0

Satu cara super mudah adalah

gem install shutup

kemudian masuk ke folder saat ini dari proyek rel Anda dan jalankan

shutup # ini akan mematikan proses Rails yang sedang berjalan

Anda dapat menggunakan perintah 'shutup' setiap kali Anda inginkan

DICLAIMER: Saya adalah pencipta permata ini

CATATAN: jika Anda menggunakan rvm, instal permata secara global

rvm @global do gem install shutup
Lorenzo Sinisi
sumber
0

Untuk mesin windows 10 saya, Ctrl - C+ Ctrl - Dberfungsi.

Ebran Khan
sumber
0

Kita dapat membunuh sesi rails di Linux menggunakan PORT no

fuser -k 3000/tcp 

di sini 3000 adalah port no. Sekarang restart server Anda, Anda akan melihat server Anda dalam keadaan berjalan.

Akash Jain
sumber
0

Ikuti langkah ini:

  1. buka proyek Anda
  2. pilih di folder tmp
  3. pilih folder pids
  4. hapus file server.pid
  5. sekarang mulai server rel Anda
Krishna Singh Shahi
sumber
Tidak berfungsi pada aplikasi 5.2 rel saya. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri
0
  1. Cukup buka file menggunakan lokasi yang diberikan sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. temukan process_id / thread_id di mana proses dijalankan.

  3. Bunuh proses / utas yang ditentukan menggunakan kill -9 84699

Soumya Sengupta
sumber
0

Di rel 6 menggunakan

ps aux | grep rails tidak mengembalikan proses server

saya harus melakukan

ps aux | grep puma

untuk menemukan proses aktual dan kemudian membunuhnya menggunakan

kill -9 {process_id}

Sami Birnbaum
sumber
0

Jika Anda menggunakan versi Rails yang lebih modern dan menggunakan Puma sebagai server web, Anda dapat menjalankan perintah berikut untuk menemukan proses Puma yang macet:

ps aux | grep puma

Ini akan menghasilkan output yang mirip dengan ini:

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

Anda ingin proses yang tidak mengacu grep. Dalam hal ini, ID proses adalah 85923.

Saya kemudian dapat menjalankan perintah berikut untuk mematikan proses itu:

kill -9 85923

masukkan deskripsi gambar di sini

Tina
sumber