Ray sunucusu durduramıyor


126

Raylarda yeniyim ve bir ubuntu makinesi ve rubymine IDE kullanıyorum. Sorun şu ki, raylar sunucusunu durduramıyorum. Raylar sürecini sonlandırarak sunucuyu durdurmaya çalıştım. Ancak pgrep -l railskoştuğumda böyle bir işlem bulunamadı. Yani, sadece Ruby işlemlerini öldürebiliyorum, ancak sunucu durmayacak.

Denedim ./script/server stop(koşarak başladığımdan beri ./script/server start), ama bu işe yaramadı. Etrafta dolaşıp bazı yığın akışı gönderileri bulduktan sonra, localhost bağlantı noktasının dinleme bağlantı noktasını değiştirmeye çalıştım, ancak başarılı olamadım. Biri yardım edebilir mi?


2
=> Sunucuyu kapatmak için Ctrl-C
gabrielhilal

@Newben tüm süreci öldürmek istiyor musun?
Öğrenci

@Sri, evet tüm süreci öldürmek istiyorum
epsilones

1
@Newben Aşağıdaki güncellenmiş cevabımı kontrol edin ve bir deneyin ve bana haber verin
Öğrenci

Yanıtlar:


303

Aşağıdakiler gibi diğer bağlantı noktalarını kullanabilirsiniz:

rails server -p 3001

Normalde terminalinizde Ctrl + Csunucuyu kapatmayı deneyebilirsiniz .

Ruby on Rails varsayılan sunucusunu (yani WEBrick) öldürmenin diğer yolu şudur:

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

İşlemin PID'sini öğrenmek için terminalinizde:

$ lsof -wni tcp:3000

Ardından işlemi sonlandırmak için PID sütunundaki sayıyı kullanın:

Örneğin:

$ kill -9 PID

Ve bulduğum diğer cevaplardan bazıları:

Ray sunucusunu çalışırken durdurmak için şu tuşa basın:

CTRL-C
CTRL-Z

Kontrolü geri alacaksınız bash. Ardından (olmadan $) yazın:

$ fg

Ve bu, sürece geri dönecek ve sonra Rails sdüzgün bir şekilde çıkacaktır .

Biraz can sıkıcı bir durum, ancak bu kesinlikle süreci manuel olarak öldürmekten daha iyi. Çok kötü değil ve çözebildiğim en iyi şey bu.

Güncellenen cevap:

killall -9 railsAdında " rails" bulunan tüm çalışan uygulamaları sonlandırmak için kullanabilirsiniz .

killall -9 rails


Üzgünüz, lsof -wni tcp: 3000 hiçbir şey döndürmüyor ve bende hiç tmp / pids / klasör yok
epsilones

Webrick çalışıyorsa, PID'si dosyadadır, {APP_ROOT}/tmp/pids/server.pidböylece sunucu çalıştığı sürece aramanıza gerek kalmaz. Öyleyse, yapmak yerine ctrl-co kill komutunu başka bir terminalde çalıştırırsanız, Webrick sunucusunu hemen öldürecektir.
Öğrenci

Killall -9 raylarını çalıştırdığımda, 'böyle bir işlem bulunamadı' mesajı alıyorum?
epsilones

Btw, {APP_ROOT} / tmp / pids / klasörü gerçekten var ama boş
epsilones

1
Bu komutların hiçbiri benim için bir şey yapmadı. Ancak, makinenin yeniden başlatılması sorunu çözdü.
Herb Meehan

51

grep komutunu şu şekilde kullanabilirsiniz,

ps aux | grep rails

ve sonra

kill -9 {process_id} 

aslında, bu commnad yalnızca '0:00 grep --color = auto rails' yakalıyor, sanırım grep adı verilen komut ...
epsilones

Hala terminal gücü kapalı olsa bile çalışan sunucu için çalışan bu çözüm için teşekkürler. Nice
ksugiarto

Ya birçok işlemim varsa ve bunları tek tek elle öldürmek istemiyorsam?
Nickolay Kondratenko

Hepsini öldürebilirsinkillall -9 rails
maximus ツ

yapmam gereken sunucuyu bulmak içinps aux | grep puma
Sami Birnbaum

27

pkill -9 rails tüm rayları öldürmek

Güncellenen cevap

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

Bu, çalışan tüm ray işlemlerini öldürecektir. Diğer işlemleri ortadan kaldırmak için 'rayları' başka bir şeyle değiştirin.


18

Aşağıda, sunucu işlemini sonlandırmak için adımlar verilmiştir:

1. lsof -i tcp:3000

2. kill -9 1234

1234işlemin PID'si nerede : localhost: 1. adımda 3000 ekran.

VEYA

Altındaki dosyayı (server.pid) kaldırın Rails.root/tmp/pids/ve sunucuyu yeniden başlatın.

VEYA

komutu kullanarak uygulamayı başka bir bağlantı noktasında açın:

rails s -p 3001



10

Genelde kullanıyorum:

killall ruby

VEYA

pkill -9 ruby

gibi çalışmakta olan tüm yakut ilişkin süreçleri öldürecek olan rails server, rails consolevb


Pkill -9 veya kill -9'u bilmiyorsanız, bunun diğer ruby ​​süreçlerini de öldürebileceğini, örneğin rubymine IDE'yi de fark etmek faydalı olabilir.
Kjell

4

1. pid dosyasını rails uygulama dizininden silin

Rails_app -> tmp -> pids -> pid file

Dosyayı silin ve çalıştırın

rails start


2. Rails 5.0 ve üstü için bu komutu kullanabilirsiniz

rails restart


3

ctrl+cWebrick Sunucunuzu kapatmak için kullanın .

Ne yazık ki işe yaramazsa, terminali zorla kapatın ve yeniden başlatın.

Başka bir numara da

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

yeniden başlatsanız bile bazen sunucu çalışıyor. Çünkü sunucuyu durdurmak için temp / pid'i öldürmemiz gerekiyor
Öğrenci,

Ancak normalde, uçbirimin sonlandırılması işlemi ön plan sürecini durdurur ve uçbirim üzerinde çalışır.
Gopal S Rathore

3

Server.pid dosyasını tmp / pids klasöründen silin. Benim durumumda hata şuydu: Bir sunucu zaten çalışıyor. /Home/sbhatta/myapp/tmp/pids/server.pid adresini kontrol edin.

Bu yüzden server.pid'i siliyorum

rm /home/sbhatta/myapp/tmp/pids/server.pid o zaman koş rails s


3

Adım 1: 3000 bağlantı noktası tüketen öğelerin neler olduğunu bulun.

lsof -i:3000

2. adım: adlı işlemi bulun

Mac için

ruby      TCP localhost:hbci (LISTEN)

Ubuntu için

ruby      TCP *:3000 (LISTEN)

Adım 3: İşlemin PID'sini bulun ve öldürün.

kill -9 PID


2

killall -9 railsSri'nin önerdiği gibi kullandım ve işe yaramadı. Komutu olarak ayarladım killall -9 rubyve sunucu hemen kapandı.

Tl; dr: killall -9 ruby



1

Rails sunucusu başlamadığında, zaten çalışıyor demektir, o zaman yeni bağlantı noktası kullanarak başlayabilirsiniz, örn.

rails s -p 3001

veya bu durumda başlar ve durur bu durumda rails dizin yapısındaki temp klasörü silmek istediğinizde , rails sunucusunu başlatır.


1

/tmp/tmp/server.pid adresini kontrol edin

içinde bir pid var.

Genellikle cmd'de "kill -9 THE_PID" yaparım


Bu yola sahip değilim, bir ubuntu makinesinde nerede olabilir?
epsilones

gizli ... uygulama klasörünüze gidin, gizli dosyalarınızı göstermek için ctrl + H, sonra onu görebilirsiniz
Nich

1

Windows'ta fark ettim (10 kullanıyorum ama oler için aynı olup olmadığından emin değilim). Cmd.exe ve ctrl + c kullanırsanız, elevl sunucusu doğru şekilde durur.

Ancak, Git Bash kullanıyorsanız, kullanmaz. Sahip olduğunu söylüyor ama tmp pid'lerine baktığınızda hala orada.

Belki git bash ile ilgili bir hata?


1

killall -9 rubytüm Ruby süreçlerini öldürecek ve en azından benim makinemde ray sunucuları Ruby süreçleri olarak görünüyor. killall -9 railsçok daha spesifiktir ve ray sunucularının eski sürümleri için çalışmaz (işlem ruby ​​olarak adlandırıldığı için 'raylar: süreç bulunamadı' verir)

Bu problemle bir süre önce karşılaşıldı. Activeadmin'de bir form gönderdikten sonra, rails sunucusu askıda kaldı ve normal yollarla onu öldüremedim (ctrl + z'den sonra bile arka planda çalışıyordu). Öğrencinin cevabı yardımcı oldu, ancak bu komutun işlem kimliğine ihtiyacı yok.


0

Bu soru için geç. İşte benim 2 sentim. Erişimim olmadığında sunucuyu durdurmak için bir komisyon görevi yaptım. Yine de sadece Mac'te test ettim.

Bununla projenize ekleyebilir ve ardından rake komutunu çalıştırabilirsiniz.

Hadi bakalım:

Ana bağlantı: -en son sürüm burada olacak. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Buradaki bazı kodlar:

# 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

Ayrıca, sunucuyu başlatmak için kullanılan aynı terminalde (sekme) Cntrl + C komutunu kullandığınızdan emin olun.

Benim durumumda 2 sekmem vardı ancak sunucuyu doğru sekmeden durdurmayı unuttum ve Cntrl + C'nin neden çalışmadığını merak ediyordum.


0

Süper kolay bir yol olurdu

gem install shutup

sonra rails projenizin mevcut klasörüne gidin ve çalıştırın

shutup # bu, şu anda çalışan Rails işlemini sonlandıracak

İstediğin zaman 'kapa' komutunu kullanabilirsin

DİKKAT EDİCİ: Ben bu mücevherin yaratıcısıyım

NOT: rvm kullanıyorsanız, gem'i global olarak kurun

rvm @global do gem install shutup


0

PORT no kullanarak Linux'ta rails oturumunu öldürebiliriz

fuser -k 3000/tcp 

burada 3000 bir bağlantı noktasıdır. Şimdi sunucunuzu yeniden başlatın, sunucunuzun çalışır durumda olduğunu göreceksiniz.


0

Bu adımları takip et:

  1. projeni aç
  2. tmp klasöründe seçin
  3. pids klasörü seç
  4. server.pid dosyasını sil
  5. şimdi raylar sunucunuzu başlatın

Raylar 5.2 uygulamasında çalışmadı. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

0
  1. Dosyayı verilen konumu kullanarak açın sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. İşlemin çalıştığı process_id / thread_id'yi bulun.

  3. Belirtilen süreci / iş parçacığını kullanarak öldürün kill -9 84699


0

Raylarda 6 kullanarak

ps aux | grep rails sunucu sürecini iade etmiyordu

yapmak zorundaydım

ps aux | grep puma

gerçek süreci bulmak ve sonra onu kullanarak öldürmek için

kill -9 {process_id}


0

Rails'in daha modern bir sürümünü kullanıyorsanız ve web sunucusu olarak Puma kullanıyorsa, sıkışmış Puma işlemini bulmak için aşağıdaki komutu çalıştırabilirsiniz:

ps aux | grep puma

Şuna benzer bir çıktıyla sonuçlanacaktır:

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

Atıfta bulunmayan süreci istiyorsun grep. Bu durumda, işlem kimliği 85923'tür.

Daha sonra bu işlemi sonlandırmak için aşağıdaki komutu çalıştırabilirim:

kill -9 85923

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.