【问题标题】:Puma Error: Cannot assign requested address - bind(2) for "10.0.2.2" port 3000 (Errno::EADDRNOTAVAIL)Puma 错误:无法分配请求的地址 - 为“10.0.2.2”端口 3000 绑定 (2) (Errno::EADDRNOTAVAIL)
【发布时间】:2020-11-05 02:35:41
【问题描述】:

我在我的开发环境中将webrick改为puma,但是我无法运行rails server,看看我的错误:

➜ r4u rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.6.0 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
127.0.0.1
10.0.2.2
Exiting
/home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:267:in `initialize': Cannot assign requested address - bind(2) for "10.0.2.2" port 3000 (Errno::EADDRNOTAVAIL)
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:267:in `new'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:267:in `add_tcp_listener'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:260:in `block in add_tcp_listener'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:259:in `each'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:259:in `add_tcp_listener'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:102:in `block in parse'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:85:in `each'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/binder.rb:85:in `parse'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/runner.rb:133:in `load_and_bind'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/single.rb:85:in `run'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/puma/launcher.rb:172:in `run'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/puma-3.6.0/lib/rack/handler/puma.rb:51:in `run'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/rack-2.0.1/lib/rack/server.rb:296:in `start'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/server.rb:79:in `start'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:90:in `block in server'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `server'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>'
  from /home/luiz/Dropbox/projetos/r4u/bin/rails:9:in `require'
  from /home/luiz/Dropbox/projetos/r4u/bin/rails:9:in `<top (required)>'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `load'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `call'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/client/command.rb:7:in `call'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/client.rb:30:in `run'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/bin/spring:49:in `<top (required)>'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `load'
  from /home/luiz/.rvm/gems/ruby-2.3.1/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `<top (required)>'
  from /home/luiz/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from /home/luiz/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from /home/luiz/Dropbox/projetos/r4u/bin/spring:13:in `<top (required)>'
  from bin/rails:3:in `load'
  from bin/rails:3:in `<main>

好的,我知道problem is in my environment 并且存在另一个使用此地址的进程。但是我该如何解决呢?看看我的网络统计数据

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:17603         0.0.0.0:*               LISTEN      2975/dropbox    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1401/mysqld     
tcp        0      0 127.0.0.1:5939          0.0.0.0:*               LISTEN      1497/teamviewerd
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2079/dnsmasq    
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1507/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      4437/cupsd      
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1413/postgres   
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2975/dropbox    
tcp        0      0 127.0.0.1:17600         0.0.0.0:*               LISTEN      2975/dropbox    
tcp6       0      0 :::80                   :::*                    LISTEN      2049/apache2    
tcp6       0      0 ::1:631                 :::*                    LISTEN      4437/cupsd      
tcp6       0      0 :::17500                :::*                    LISTEN      2975/dropbox    
udp        0      0 0.0.0.0:631             0.0.0.0:*                           1315/cups-browsed
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2975/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           3282/chrome     
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           3282/chrome     
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           1142/avahi-daemon: 
udp        0      0 0.0.0.0:14381           0.0.0.0:*                           1464/dhclient   
udp        0      0 0.0.0.0:52083           0.0.0.0:*                           1142/avahi-daemon: 
udp        0      0 192.168.122.1:53        0.0.0.0:*                           2079/dnsmasq    
udp        0      0 127.0.1.1:53            0.0.0.0:*                           1507/dnsmasq    
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2079/dnsmasq    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1464/dhclient   
udp6       0      0 :::5353                 :::*                                3282/chrome     
udp6       0      0 :::5353                 :::*                                1142/avahi-daemon: 
udp6       0      0 :::42534                :::*                                1142/avahi-daemon: 
udp6       0      0 :::22297                :::*                                1464/dhclient   
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     16311    2521/gnome-keyring- /run/user/1000/keyring-44aQ70/control
unix  2      [ ACC ]     STREAM     LISTENING     10981    2139/Xorg           /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     21805    3282/chrome         /tmp/.com.google.Chrome.ij7UG8/SingletonSocket
unix  2      [ ACC ]     STREAM     LISTENING     160803   18684/spring server /run/user/1000/spring-1000/2ce6127e98884ac8253b4dfd188b6d2e
unix  2      [ ACC ]     STREAM     LISTENING     17883    2702/gnome-session  /tmp/.ICE-unix/2702
unix  2      [ ACC ]     STREAM     LISTENING     16689    2521/gnome-keyring- /run/user/1000/keyring-44aQ70/pkcs11
unix  2      [ ACC ]     STREAM     LISTENING     16693    2521/gnome-keyring- /run/user/1000/keyring-44aQ70/ssh
unix  2      [ ACC ]     STREAM     LISTENING     16694    2521/gnome-keyring- /run/user/1000/keyring-44aQ70/gpg
unix  2      [ ACC ]     STREAM     LISTENING     17882    2702/gnome-session  @/tmp/.ICE-unix/2702
unix  2      [ ACC ]     STREAM     LISTENING     18531    2780/pulseaudio     /run/user/1000/pulse/native
unix  2      [ ACC ]     STREAM     LISTENING     10980    2139/Xorg           @/tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     30610    3029/gvfsd-trash    @/dbus-vfs-daemon/socket-q8PPBuMR
unix  2      [ ACC ]     STREAM     LISTENING     7237     1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     SEQPACKET  LISTENING     9210     404/systemd-udevd   /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     10185    1014/dbus-daemon    /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     14343    1103/bluetoothd     /var/run/sdp
unix  2      [ ACC ]     STREAM     LISTENING     14415    1142/avahi-daemon:  /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     15262    2708/dbus-daemon    @/tmp/dbus-enRuhGcuXb
unix  2      [ ACC ]     STREAM     LISTENING     11808    1322/acpid          /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     14534    1413/postgres       /var/run/postgresql/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     17734    2523/init           @/com/ubuntu/upstart-session/1000/2523
unix  2      [ ACC ]     STREAM     LISTENING     14064    1372/libvirtd       /var/run/libvirt/libvirt-sock
unix  2      [ ACC ]     STREAM     LISTENING     14065    1372/libvirtd       /var/run/libvirt/libvirt-sock-ro
unix  2      [ ACC ]     STREAM     LISTENING     14584    1401/mysqld         /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     24298    3818/gvfsd-http     @/dbus-vfs-daemon/socket-vY0yhUY7
unix  2      [ ACC ]     STREAM     LISTENING     17751    2642/dbus-daemon    @/tmp/dbus-QUMescAA1H
unix  2      [ ACC ]     STREAM     LISTENING     17335    2975/dropbox        /home/luiz/.dropbox/command_socket
unix  2      [ ACC ]     STREAM     LISTENING     19116    2975/dropbox        /home/luiz/.dropbox/iface_socket
unix  2      [ ACC ]     STREAM     LISTENING     17829    2666/ibus-daemon    @/tmp/dbus-trIHWO34
unix  2      [ ACC ]     STREAM     LISTENING     27107    4437/cupsd          /var/run/cups/cups.sock

还有我的 SS 日志

➜ r4u ss -tp 
State       Recv-Q Send-Q                                                                    Local Address:Port                                                                        Peer Address:Port   
ESTAB       0      0                                                                            10.0.0.107:49782                                                                      187.73.143.66:http     users:(("chrome",3282,226))
CLOSE-WAIT  1      0                                                                            10.0.0.107:35032                                                                       209.20.75.76:http     users:(("plugin_host",4558,114))
ESTAB       0      0                                                                            10.0.0.107:38126                                                                        52.73.27.41:https    users:(("dropbox",2975,119))
ESTAB       0      0                                                                            10.0.0.107:51506                                                                     64.233.190.189:https    users:(("chrome",3282,95))
ESTAB       0      0                                                                            10.0.0.107:53868                                                                     198.252.206.25:https    users:(("chrome",3282,283))
CLOSE-WAIT  1      0                                                                            10.0.0.107:45888                                                                       91.189.94.25:http     users:(("ubuntu-geoip-pr",3738,9))
ESTAB       0      0                                                                            10.0.0.107:58574                                                                     192.30.253.124:https    users:(("chrome",3282,273))
LAST-ACK    1      1                                                                            10.0.0.107:58274                                                                       52.7.106.188:https   
ESTAB       0      0                                                                            10.0.0.107:53918                                                                     198.252.206.25:https    users:(("chrome",3282,308))
ESTAB       0      0                                                                            10.0.0.107:38220                                                                     151.101.193.69:http     users:(("chrome",3282,310))
CLOSE-WAIT  32     0                                                                            10.0.0.107:33284                                                                         45.58.74.1:https    users:(("dropbox",2975,148))
ESTAB       0      0                                                                            10.0.0.107:54614                                                                      216.58.202.46:https    users:(("chrome",3282,94))
ESTAB       0      0                                                                            10.0.0.107:38194                                                                     151.101.193.69:http     users:(("chrome",3282,306))
ESTAB       0      0                                                                            10.0.0.107:53882                                                                      216.58.202.46:https    users:(("chrome",3282,113))
ESTAB       0      0                                                                            10.0.0.107:49496                                                                      52.84.170.161:https    users:(("dropbox",2975,130))
ESTAB       0      0                                                                            10.0.0.107:33866                                                                     151.101.129.69:http     users:(("chrome",3282,296))
CLOSE-WAIT  32     0                                                                            10.0.0.107:52664                                                                    108.160.172.204:https    users:(("dropbox",2975,34))
ESTAB       0      0                                                                            10.0.0.107:33934                                                                     151.101.129.69:http     users:(("chrome",3282,231))
ESTAB       0      0                                                                            10.0.0.107:57396                                                                    173.255.112.173:https    users:(("chrome",3282,206))
CLOSE-WAIT  32     0                                                                            10.0.0.107:35746                                                                    108.160.172.225:https    users:(("dropbox",2975,99))
ESTAB       0      0                                                                            10.0.0.107:57878                                                                      201.67.45.154:http     users:(("chrome",3282,158))
ESTAB       0      0                                                                            10.0.0.107:51750                                                                     162.125.34.129:https    users:(("dropbox",2975,110))
ESTAB       0      0                                                                            10.0.0.107:38246                                                                     64.233.190.188:5228     users:(("chrome",3282,115))
ESTAB       0      0                                                                            10.0.0.107:55408                                                                      216.58.202.46:https    users:(("chrome",3282,128))
ESTAB       0      0                                                                            10.0.0.107:58602                                                                     192.30.253.124:https    users:(("chrome",3282,295))
ESTAB       0      0                                                                            10.0.0.107:44630                                                                      216.58.202.37:https    users:(("chrome",3282,257))
CLOSE-WAIT  1      0                                                                                   ::1:38188                                                                                ::1:ipp 

重要我调查了这个问题,发生在puma-3.6.0/lib/puma/binder.rb @ line 260 Puma::Binder#add_tcp_listener. exactly in *TCPServer.new(host, port)*

def add_tcp_listener(host, port, optimize_for_latency=true, backlog=1024)
  if host == "localhost"
    localhost_addresses.each do |addr|
      add_tcp_listener addr, port, optimize_for_latency, backlog
    end
    return
  end

  host = host[1..-2] if host and host[0..0] == '['
  s = TCPServer.new(host, port)
  if optimize_for_latency
    s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
  end
  s.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
  s.listen backlog
  @connected_port = s.addr[1]

  @ios << s
  s
end
  • 所以,localhost_addresses 包含 2 个值 ["127.0.0.1", "10.0.2.2"]
  • “10.0.2.2”作为参数传递时发生错误。为什么是2地址?

localhost_addresses 方法

def localhost_addresses
  addrs = TCPSocket.gethostbyname "localhost"
  addrs[3..-1].uniq #- ['10.0.2.2']
end

【问题讨论】:

  • 第一次调用localhost,第二次调用"127.0.0.1",第三次调用"10.0.2.2"?
  • @Aleksey "127.0.0.1" -> "10.0.2.2" -> "10.0.2.2"
  • localhost_addresses 只包含两个值是不是很奇怪?
  • 仅当== "localhost"
  • @Aleksey 是的,你是对的!很奇怪=\

标签: ruby-on-rails unix puma


【解决方案1】:

您的本地主机中似乎有 10.0.2.2
你可以在/etc/hosts查看。
它可能看起来像

...
127.0.0.1       localhost
10.0.2.2        localhost
...

如果您在这里不需要 10.0.2.2 并且您不知道为什么得到它(您的情况 =))您可以删除此行并尝试再次运行 rails s
也许您必须重新启动网络系统,或者您可以重新启动。

另一种方法是在特定主机上运行 rails 服务器,例如

rails s -b 127.0.0.1

我不知道问题的确切原因,但我希望它能以某种方式帮助你。

【讨论】:

    【解决方案2】:

    我收到了类似的错误(不同的端口),但这是因为我试图使用一个已经占用的端口。另一个 docker 容器已经在监听相关端口。

    在运行 sudo lsof -i :PORT 的 MacOS 上显示哪个进程(例如 docker)控制有问题的端口并导致它不可用。

    我的解决方案是将 Rails/Puma 配置更改为不同的端口。最好的!

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 2012-11-30
      • 2011-10-13
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2020-06-06
      • 2020-08-24
      • 2013-03-16
      相关资源
      最近更新 更多