Rails 5地址已在使用中 - bind(2)表示“127.0.0.1”端口3000

时间:2016-07-19 13:43:35

标签: ruby-on-rails ruby

经过一些编码后,在运行rails s

时出现此错误
Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)

我的环境是:

$ rails -v       
Rails 5.0.0
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]

我试过了:

  1. 创建一个新项目 - 相同
  2. Checked Rails 4.2 - 问题已解决
  3. 重新安装rails 5和ruby - 同样的问题
  4. lsof -wni tcp:3000不给我任何回报
  5. ps aux | grep“rails” - 没什么
  6. ps aux | grep“puma” - 没什么
  7. ps aux | grep“ruby”-nothing
  8. 使用puma代替rails s - 问题已解决
  9. 使用rails s -p 3001 - 同样的问题,也适用于其他端口
  10. 已更新

    1. 使用RAILS_ENV=production bundle exec rails s - 问题已解决
    2. 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您的错误是说端口3000上已经存在某些内容。如果不了解您的环境或已安装的内容,则无法知道要停止的内容。

很有可能另一个rails服务器已经在某个地方运行。尝试访问localhost:3000,看看那里有什么。

可能是因为某些未知原因,另一个程序正在这个端口上捎带,如果是这样,你就无法阻止它,使用不同的端口

rails s -p 3001

或您选择的任何其他端口

答案 1 :(得分:0)

问题出现是因为Puma的代码中存在错误。降级到最老版本帮助了我。

错误提示:https://github.com/puma/puma/issues/1022

答案 2 :(得分:0)

同一个进程正在某处运行

要查看哪个进程使用了​​3000端口并在命令

下获取进程pid类型
lsof -wni tcp:3000

这将给出正在使用此端口的进程

示例结果

process1   12345   0.0  0.0  12343566  1972 s000  R+   11:17AM   0:00.00 grep puma

您可以通过输入以下命令

来终止此过程

12345 这是进程ID

kill -9 12345

现在再次启动服务器