40

Rails プロジェクトで、2 つの異なるサーバーを異なるポートで実行しようとしています。しかし、コンソールでこのエラーを出して失敗します。

C:\Rails>rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
A server is already running. Check C:/Rails/tmp/pids/server.pid.Exiting

更新された回答を確認してください。

4

14 に答える 14

52

たくさんグーグルした後、そのファイルを削除してサーバーを再起動するだけです。次に、システムがそのファイルを作成し、もう一度そのファイルを削除します。現在、サーバーは正常に動作しています。そして、システムは同じ場所に別のコピーを生成します。しかし、それはうまくいっています。

DELETE THAT FILE ....

2 つのサーバーを実行する場合は、再び問題が発生する可能性があります。そう

どちらのコマンドもデフォルトの PID ファイルの場所 (tmp/pids/server.pid) をチェックしているため、このエラーが表示されます。次のように複数のサーバーを実行してみてください。

Server 1: bundle exec rails s

Server 2: bundle exec rails s -p 3001 -P tmp/pids/server2.pid

クレジット: https://stackoverflow.com/a/14446920/1376448

ありがとう

コナー・リーチがフォーマン・ジェムについてコメントした後の更新

Foreman は、Rails アプリが開発中に依存する複数のプロセスを管理するのに役立ちます。また、それらを本番環境に移行するためのエクスポート コマンドも提供します。

于 2013-02-28T04:18:41.810 に答える
38

netstat を使用して、どのプロセスが Rails Web サーバーを保持しているかを知ることができます。次に、何らかの奇妙な理由でサーバーが応答していない、またはバックグラウンドで実行されておらず、別の方法が見つからないと仮定して、pid を強制終了して最初からやり直すことができます。再起動します..

netstat -plntu | grep 3000
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      7656/ruby

最後の列には PID とプロセス名が表示されます。

kill -9 7656

そしてrails sそれを再び機能させるために...

役に立つことを願っています

于 2013-02-28T04:28:10.687 に答える
16

lsof -wni tcp:3000コマンドを見つけるためにこの Web ページに何度も戻ってくるので、この方法の方が簡単であることがわかりました。

このメッセージが表示された場合:

A server is already running. Check /Users/username/project/tmp/pids/server.pid.
Exiting

Unix システム (mac または linux) で実行している場合は、次のコマンドを実行できます。

$ cat /Users/username/project/tmp/pids/server.pid

# output

71030

# Kill the process

$ kill -9 71030

次に、サーバーを再度実行してください。

于 2014-08-22T03:15:29.803 に答える
15

tmpディレクトリにcdしてファイルを削除し、ファイルを削除しました

rm server.pid

次に、サーバーを再起動しましたが、このエラーが発生しました

Exiting/Users/josephmellin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)

次に、次のコマンドを使用して、実行中のプロセスを確認できます。

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

そして、パスワードを入力した後、この応答を得ました

ruby      2786 josephmellin   12u  IPv4 0xfeadd8ae849eaec9      0t0  TCP *:3000 (LISTEN)

そして、次のコマンドでプロセスを強制終了しました

KILL -9 2786

その後、サーバーを再起動しました (2786 とは異なる番号になります。デモ用にここに残しました)。

于 2014-06-16T16:55:43.347 に答える
3
ps aux | grep rails
           or 
bundle exec rails s -p 3001 -P tmp/pids/server2.pid
于 2015-06-25T12:41:45.467 に答える
3

ステップ 1: .pid を削除する

C:/Rails/tmp/pids/server.pid.Exiting

# IN linux/unix shell
$ rm -rf <path to file>

これで問題が解決しない場合もあります。その場合は、localhost で実行されているプロセスを強制終了する必要があります。そのような場合は、次の手順に従います。STEP 2

ステップ 2: localhost のプロセスを一覧表示し、それを強制終了します

# For Linux/Unix shell

$ lsof -wni tcp:3000

# output
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    5946 rails   11u  IPv4  79073      0t0  TCP *:3000 (LISTEN)
ruby    5946 rails   12u  IPv4 103786      0t0  TCP 127.0.0.1:3000->127.0.0.1:53612 (ESTABLISHED)

# Kill the running process
$ kill -9 5946

サーバーを再度実行します

rails server
于 2014-03-03T07:43:26.093 に答える
1

Rails のデフォルト コマンドを使用します。たとえば、次のようにします。

rake tmp:clear

私にとってはうまくいき、本当にシンプルです。;)

于 2014-01-14T12:31:23.777 に答える
1

それを処理する単一行コマンド。

kill -9 $(more C:/Rails/tmp/pids/server.pid)
于 2015-06-25T12:52:44.330 に答える
0

より少ないコマンドを見つけたより簡単な方法。a server is running in your folder structure というパスに移動します。ファイルを検索します。ファイル自体には、現在実行中のプロセス ID である番号が表示されます。数字が「x」の場合、このコマンドを端末に入力するだけです

kill -9 x

ただし、これは Ubuntu で機能することに注意してください。他のOSでも同様に動作するかどうかはわかりません。

于 2015-02-16T05:02:06.503 に答える
0

そのファイルを削除します: C:/Rails/tmp/pids/server.pid

于 2013-10-15T05:14:11.983 に答える
-1

pid ファイルの番号を別の番号に変更して保存してみてください。

于 2013-05-16T18:25:15.653 に答える