web-dev-qa-db-ja.com

EventMachine:「 `start_tcp_server ':アクセプターなし(ポートが使用中か、ルート権限が必要)」

EventMachine::runを使用してサーバーを実行しようとすると、ポートが使用中であるというエラーメッセージが表示され続けます。これは、コマンドNohupを使用してサーバーをバックグラウンドで実行してから開始されました。

私が開始したプロセスを強制終了したと確信しています:

  • 私はRuby psのプロセスを見つけ、それを強制終了しました。表示されなくなりました。
  • また、lsof -i :8081(8081は実行したポートです)も実行しましたが、何も表示されません。
  • 最後に、Rubyプログラムで何度もポートを変更して、ポートを覆い隠しましたそれでもエラーが発生しました!

また、自分がrootユーザーでなくなったのかもしれないと思ったので、rootとして試してみたが役に立たなかった。

サーバーも再起動しました。

他に試すことができるものがあれば教えてください。

注:これはdebianにあります。

19
Will Sewell

私はようやくそれを理解しました:実際に私がバインドしていたIPアドレスが間違っていました!

そのため、本質的には非常に誤解を招くエラーメッセージであり、表示された場合は、IPアドレスも確認してください。

16
Will Sewell

これは、サーバーを正しく停止しなかった場合に発生します。たとえば、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
23
Amol Udage

同じ問題があった。

lsof -i :3000を実行しました(3000は実行したポートです)。

このポートがRubyで使用されていることがわかりました。 kill -9 *pid*を使用してプロセスを終了しました。

lsof -i :3000をもう一度実行したところ、何も表示されませんでした。

次にRails sを実行しましたが、すべて正常に機能します。

22
Hanmaslah

空きポートで実行すると、次のいずれかの方法で問題が解決します。

Rails s -p 3001

または

Ruby script/Rails server webrick -e production -p 3001

または

Ruby script/Rails server thin -e production -p 3001
0

私の場合、それはただのインターネット接続の問題でした。

0
Ifelere Bolaji

多分それは誰かの時間を節約します:私の場合Railsサーバーは同じエラーを返すどのポートでも起動しません。私のマシンを再起動した後のイベントです。localhostを参照する他のサーバーは上手。

問題は私の/etc/hostsどういうわけか空になったファイル。それをデフォルトの状態に復元した後、問題は解決されました。

0
Sofest