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.