EventMachine::run
を使用してサーバーを実行しようとすると、ポートが使用中であるというエラーメッセージが表示され続けます。これは、コマンドNohup
を使用してサーバーをバックグラウンドで実行してから開始されました。
私が開始したプロセスを強制終了したと確信しています:
ps
のプロセスを見つけ、それを強制終了しました。表示されなくなりました。lsof -i :8081
(8081は実行したポートです)も実行しましたが、何も表示されません。また、自分がrootユーザーでなくなったのかもしれないと思ったので、rootとして試してみたが役に立たなかった。
サーバーも再起動しました。
他に試すことができるものがあれば教えてください。
注:これはdebianにあります。
私はようやくそれを理解しました:実際に私がバインドしていたIPアドレスが間違っていました!
そのため、本質的には非常に誤解を招くエラーメッセージであり、表示された場合は、IPアドレスも確認してください。
これは、サーバーを正しく停止しなかった場合に発生します。たとえば、Ctrl + Zで中断したり、サーバーを2回実行したりした場合です。
Ctrl + Zで停止した場合、これは私にとってはうまくいきます:
実行中のプロセスを取得するには:
$ ps ax | grep Rails
18192 pts/28 Sl+ 0:05 /home/admin/.rvm/rubies/Ruby-2.1.2/bin/Ruby bin/Rails c
20496 pts/23 Tl 0:08 /home/admin/.rvm/rubies/Ruby-2.1.2/bin/Ruby bin/Rails s
20919 pts/23 S+ 0:00 grep --color=auto Rails
次に、Rails server
が実行されているプロセスを強制終了します。
$ kill 20496
数秒たっても閉じない場合は、-9
を使用して「強制」で閉じることができます(ただし、これにより、Railsからのクリーンアップが妨げられます)。
$ kill -9 20496
これで、サーバーを再起動できます。
$ Rails s
同じ問題があった。
lsof -i :3000
を実行しました(3000は実行したポートです)。
このポートがRubyで使用されていることがわかりました。 kill -9 *pid*
を使用してプロセスを終了しました。
lsof -i :3000
をもう一度実行したところ、何も表示されませんでした。
次にRails s
を実行しましたが、すべて正常に機能します。
空きポートで実行すると、次のいずれかの方法で問題が解決します。
Rails s -p 3001
または
Ruby script/Rails server webrick -e production -p 3001
または
Ruby script/Rails server thin -e production -p 3001
私の場合、それはただのインターネット接続の問題でした。
多分それは誰かの時間を節約します:私の場合Railsサーバーは同じエラーを返すどのポートでも起動しません。私のマシンを再起動した後のイベントです。localhostを参照する他のサーバーは上手。
問題は私の/etc/hosts
どういうわけか空になったファイル。それをデフォルトの状態に復元した後、問題は解決されました。