Railsサーバーを停止できません


126

Railsは初めてで、ubuntuマシンとrubymine IDEを使用しています。問題は、Railsサーバーを停止できないことです。Railsプロセスを強制終了してサーバーを停止しようとしました。しかし、を実行してもpgrep -l rails、そのようなプロセスは見つかりません。だから、私はルビープロセスを殺すことができるだけですが、サーバーは停止しません。

./script/server stop(を実行して開始したため)試しました./script/server startが、うまくいきませんでした。グーグルでいくつかのスタックオーバーフローの投稿を見つけて、localhostポートのリスニングポートを変更しようとしましたが、成功しませんでした。誰か助けてもらえますか?


2
=> Ctrl-Cでサーバーをシャットダウン
gabrielhilal '26 / 02/26

@Newbenはすべてのプロセスを殺したいですか?
2013

@スリ、はい、すべてのプロセスを終了したい
イプシロン

1
@Newben以下の私の更新された回答を確認し、試して教えてください
学習者

回答:


303

次のような他のポートを使用できます。

rails server -p 3001

通常はあなたの端末で試すことができます Ctrl + Cサーバーをシャットダウンするます。

Ruby on Railsのデフォルトサーバー(つまりWEBrick)を強制終了するもう1つの方法は次のとおりです。

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

端末で、プロセスのPIDを確認します。

$ lsof -wni tcp:3000

次に、PID列の番号を使用してプロセスを強制終了します。

例えば:

$ kill -9 PID

そして私が見つけた他の答えのいくつかは:

実行中にRailsサーバーを停止するには、次のキーを押します。

CTRL-C
CTRL-Z

に制御が戻りbashます。次に(なしで$)入力します:

$ fg

そして、これはプロセスに戻り、Rails s適切に終了します。

それは少し面倒ですが、これは確かに手動でプロセスを強制終了することよりも優れています。それはそれほど悪くはなく、それは私が理解できる最高のものです。

更新された回答:

名前にkillall -9 railsrails」が含まれている実行中のすべてのアプリを強制終了できます。

killall -9 rails


申し訳ありませんが、lsof -wni tcp:3000は何も返さず、tmp / pids /フォルダーもありません
epsilones

Webrickが実行されている場合、そのPIDは{APP_ROOT}/tmp/pids/server.pidファイルにあるため、サーバーが実行されている限り、それを探す必要はありません。そのctrl-cため、別のターミナルでそのkillコマンドを実行する代わりに、Webrickサーバーをすぐに強制終了します。
2013

killall -9レールを実行すると、「そのようなプロセスが見つかりません」というメッセージが表示されますか?
イプシロン

ところで、フォルダ{APP_ROOT} / tmp / pids / existsは確かに存在しますが、空です
イプシロン

1
これらのコマンドはどれも私には何もしませんでした。ただし、マシンを再起動すると問題が解決しました。
ハーブミーハン

51

次の方法でgrepコマンドを使用できます。

ps aux | grep rails

その後

kill -9 {process_id} 

実際、このコマンドは、「0:00 grep --color = auto rails」のみをキャッチします。これは、コマンドと呼ばれるgrepだと思います...
epsilones

ターミナルフォースが閉じても実行されるサーバーで機能するこのソリューションに感謝します。ニース
ksugiarto 2013年

また、多くのプロセスがあり、それらを1つずつ手動で強制終了したくない場合はどうなりますか?
Nickolay Kondratenko 2015年

あなたはそれらすべてを殺すことができますkillall -9 rails
マキシムツツン

私がしなければならなかったサーバーを見つけるためにps aux | grep puma
サミバーンバウム

27

pkill -9 rails レールのすべてのプロセスを殺す

回答を更新しました

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

これにより、実行中のRailsプロセスが強制終了されます。他のプロセスを強制終了するには、「rails」を別のものに置き換えます。


18

サーバープロセスを強制終了する手順は次のとおりです。

1. lsof -i tcp:3000

2. kill -9 1234

ここ1234で、プロセスのPIDは、ステップ1のlocalhost:3000ディスプレイです。

または

下のファイル(server.pid)を削除しRails.root/tmp/pids/、サーバーを再起動します。

または

コマンドを使用して別のポートでアプリを開きます。

rails s -p 3001



10

私は通常使用します:

killall ruby

または

pkill -9 ruby

、などのようrails serverに実行されているすべてのルビ関連プロセスを強制終了しますrails console


pkill -9やkill -9がわからない場合は、他のrubyプロセス(rubymine IDEなど)もkillされる可能性があることにも注意してください。
ケル

4

1. Railsアプリディレクトリからpidファイルを削除するだけ

Rails_app -> tmp -> pids -> pid file

ファイルを削除して実行します

rails start


2. Rails 5.0以降では、このコマンドを使用できます

rails restart


3

ctrl+cWebrick Serverをシャットダウンするために使用します。

残念ながら機能しない場合は、ターミナルを強制的に閉じて再起動してください。

別のトリックは

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

サーバーが実行されていることもあります。サーバーを停止するにはtemp / pidを強制終了する必要があるため
Learner

しかし、通常、ターミナルを終了すると、プロセスはそのフォアグラウンドプロセスを停止し、ターミナルで実行されます。
Gopal S Rathore 2013

3

tmp / pidsフォルダーからserver.pidを削除します。私の場合、エラーは次のとおりでした:サーバーは既に実行中です。/home/sbhatta/myapp/tmp/pids/server.pidを確認します。

したがって、server.pidを削除します

rm /home/sbhatta/myapp/tmp/pids/server.pid 次に実行します rails s


3

手順1:アイテムが3000ポートを消費しているものを見つけます。

lsof -i:3000

手順2:という名前のプロセスを見つける

Mac用

ruby      TCP localhost:hbci (LISTEN)

Ubuntuの場合

ruby      TCP *:3000 (LISTEN)

ステップ3:プロセスのPIDを見つけて強制終了します。

kill -9 PID


2

私はkillall -9 railsSriが提案したように使用しましたが、機能しませんでした。コマンドを調整しkillall -9 ruby、サーバーをすぐに閉じました。

Tl; dr: killall -9 ruby


2

それはと同じくらい簡単です

pkill -9 ruby

何もない何もない


1

Railsサーバーが起動しない場合は、すでに実行されていることを意味します。たとえば、新しいポートを使用して起動できます。

rails s -p 3001

または、railsディレクトリ構造の一時フォルダ削除したい場合は、起動して停止し、railsサーバーを起動します。


1

/tmp/tmp/server.pidを確認します

内部にpidがあります。

通常、私はコマンドで「kill -9 THE_PID」を実行します


私はこのパスを持っていません、それはubuntuマシンのどこにありますか?
エプシロン2013

それは隠されています...あなたのアプリフォルダーに移動し、ctrl + Hを
押し

1

Windowsで気づきました(10を使用していますが、olerでも同じかどうかはわかりません)。cmd.exeとctrl + cを使用すると、raislサーバーは正しく停止します。

ただし、Git Bashを使用する場合は使用しません。それは持っていると言いますが、tmp pidを見ると、まだそこにあります。

たぶんgit bashのバグですか?


1

killall -9 ruby rubyプロセスはすべて強制終了し、少なくとも私のマシンでは、railsサーバーはrubyプロセスとして表示されます。 killall -9 railsより具体的で、古いバージョンのRailsサーバーでは機能しません(プロセスの名前がrubyであるため、「rails:no process found」が表示されます)

しばらく前にこの問題が発生しました。activeadminでフォームを送信した後、railsサーバーがハングしたため、通常の方法ではフォームを強制終了できませんでした(Ctrl + Zを押した後でも、バックグラウンドで実行されていました)。学習者の答えは役に立ちましたが、このコマンドはプロセスIDを必要としません。


0

この質問には間に合いません。これが私の2セントです。サーバーにアクセスできないときにサーバーを停止するために、rakeタスクを作成しました。Macでのみテストしました。

これにより、プロジェクトに追加して、rakeコマンドを実行できます。

どうぞ:

要旨リンク:-最新バージョンはこちらになります。 https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

ここにいくつかのコード:

# 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

また、サーバーの起動に使用したのと同じターミナル(タブ)でコマンドCntrl + Cを実行していることを確認してください。

私の場合、2つのタブがありましたが、正しいタブからサーバーを停止するのを忘れており、なぜCntrl + Cが機能しないのかと思っていました。


0

とても簡単な方法は

gem install shutup

次に、railsプロジェクトの現在のフォルダーに移動して実行します

shutup #これにより、現在実行中のRailsプロセスが強制終了されます

いつでもコマンド「shutup」を使用できます

DICLAIMER:私はこの宝石の作成者です

注:rvmを使用している場合は、gemをグローバルにインストールします

rvm @global do gem install shutup


0

LinuxでPORTを使用してRailsセッションを強制終了できます

fuser -k 3000/tcp 

ここで3000はポート番号です。サーバーを再起動すると、サーバーが実行状態にあることがわかります。


0

次の手順を実行します:

  1. プロジェクトを開く
  2. tmpフォルダで選択
  3. pidsフォルダーを選択
  4. server.pidファイルを削除する
  5. Railsサーバーを起動します

Rails 5.2アプリケーションで動作しませんでした。Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

0
  1. 指定された場所を使用してファイルを開くだけです sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. プロセスが実行されているprocess_id / thread_idを見つけます。

  3. 指定したプロセス/スレッドを使用して強制終了します kill -9 84699


0

レール6を使用

ps aux | grep rails サーバープロセスを返さなかった

私がしなければなりませんでした

ps aux | grep puma

実際のプロセスを見つけ、それを使用してそれを殺す

kill -9 {process_id}


0

より新しいバージョンのRailsを使用していて、WebサーバーとしてPumaを使用している場合は、次のコマンドを実行して、スタックしているPumaプロセスを見つけることができます。

ps aux | grep puma

結果は次のようになります。

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

を参照していないプロセスが必要ですgrep。この場合、プロセスIDは85923です。

その後、次のコマンドを実行してそのプロセスを強制終了できます。

kill -9 85923

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.