2016-09-24 1 views
2

Ich ändere Webrick zu PUMA in meiner Entwicklungsumgebung, aber ich kann Rails Server nicht ausführen, schau mein Fehler:Puma Error: Kann angeforderte Adresse nicht zuweisen - Bind (2) für "10.0.2.2" Port 3000 (Errno :: EADDRNOTAVAIL)

➜ 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> 

Ok, ich weiß, dass problem is in my environment und dass eine weitere proccess existieren diese addresss verwenden. Aber wie kann ich das lösen? Schauen Sie meine netstats

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 

Und mein SS log

➜ 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 

WICHTIG ich das Problem zu untersuchen, in 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 
  • tritt also localhost_addresses enthält zwei Werte ["127.0.0.1", "10.0.2.2"]
  • Der Fehler tritt auf, wenn "10.0.2.2" als Parameter übergeben wird. Warum 2 Adresse?

Die localhost_addresses Methode

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

erster Aufruf mit 'localhost', zweiter mit' "127.0.0.1" 'und dritter mit' "10.0.2.2" '? – Aleksey

+0

@Aleksey '" 127.0.0.1 "' -> '" 10.0.2.2 "' -> '" 10.0.2.2 "' –

+0

ist es nicht seltsam, wenn 'localhost_addresses' nur zwei Werte enthält? – Aleksey

Antwort

3

Scheint, wie Sie 10.0.2.2 in Ihrem localhost haben.
Sie können es in /etc/hosts überprüfen.
Es

... 
127.0.0.1  localhost 
10.0.2.2  localhost 
... 

aussehen können, wenn Sie hier nicht 10.0.2.2 brauchen, und Sie wissen nicht, warum Sie es bekommen (Ihr Fall =)) Sie diese Zeile entfernen und versuchen rails s erneut auszuführen.
Vielleicht müssten Sie Ihr Netzwerksystem neu starten oder Sie können neu starten.

Eine andere Möglichkeit wäre Schienen-Server auf bestimmten Host wie

rails s -b 127.0.0.1 

Ich weiß nicht, genauen Gründe des Problems ausgeführt werden, aber ich hoffe, dass es Ihnen irgendwie hilft.

+0

Funktioniert wunderbar. Danke: D –

Verwandte Themen