2

Disclamer:私は完全な初心者なので、ご容赦ください。問題の名前を付ける方法がわからないため、ネットで回答を確認するのは面倒でした。

ポートに問題があります。

問題: 次のコマンド行からRailsサーバーを起動します。

rails s -p 3500

別のコンピューターがそれを使用しています。ただし、サーバーがハングした場合(ターミナルを閉じてサーバーをシャットダウンした場合)、同じポートを介してRailsサーバーを起動できません。複数のソケットの使用について不平を言う(そして主張する)。他の誰も同じポートを使用していないことは間違いありません*。


応急処置:サーバーを稼働させるには、コンピューターを再起動するか、ポートを3501に変更します。面倒です。

仮定: ポートは接続されたままになっているようです。

ここで私は別の回避策を見つけました(以下に引用)

タスクマネージャーでruby.exeプロセスを見つけて、終了します

この問題を解決する簡単な方法はありますか?上記の便利な回避策は試していませんが、うまくいくと確信しています。

さて、私の主な質問に戻りましょう。 サーバーは実際に舞台裏でポートを使用していますか?

これを防ぐ方法はありますか?

**誰が100%確信できますか?それがこの問題の唯一の原因である場合は、ご容赦ください。*

編集:
OS:Windows 7 Professional

4

1 に答える 1

1

ruby.exe はタスク マネージャーのプロセスの下に表示されますか? それはそれを殺す簡単な方法です。表示されない場合は、コマンド プロンプトから次の操作を行います。

netstat -a -o

これにより、システムで使用されているすべてのポートが一覧表示されます。tcp セクションの下で、実行中のポートを見つけます。エントリが見つかると、それが実行されているプロセス ID が一覧表示されます。次に、次のようにその PID を強制終了する必要があります

taskkill -F /PID 2632

以下は、Windows マシンで使用した行です。

Proto  Local Address          Foreign Address        State           PID
TCP    0.0.0.0:3000           fastone:0              LISTENING       2632

デフォルトのRailsポートを使用していたので、pid 2632を殺しました。なぜそれが起こるのですか?これは、ほとんどの Rails アプリがデプロイされている Linux の世界でも発生します。問題は、端末ウィンドウを閉じたときなどに ruby​​ プロセスがまだ実行されていることです。プロセスはバックグラウンドで消えます。ポートはまだ使用されており、サービスはまだ実行されています。それを防ぐ簡単な方法があるかどうかはわかりません。プログラミングの世界へようこそ

于 2012-05-15T03:16:40.400 に答える