web-dev-qa-db-fra.com

Adresse déjà utilisée - bind (2) (Errno :: EADDRINUSE)

J'essaie de déployer l'application Rails avec le serveur Web Puma. En essayant de démarrer le serveur Puma avec un fichier de configuration bundle exec puma -C config/puma.rb, je reçois un message d'erreur indiquant que l'adresse est déjà utilisée.

Est-ce que quelqu'un sait comment résoudre ce problème?

bundle exec puma -C config/puma.rb
[23699] Puma starting in cluster mode...
[23699] * Version 2.11.3 (Ruby 2.0.0-p353), codename: Intrepid Squirrel
[23699] * Min threads: 5, max threads: 5
[23699] * Environment: development
[23699] * Process workers: 2
[23699] * Preloading application
Jdbc-MySQL is only for use with JRuby
[23699] * Listening on tcp://0.0.0.0:3000
/.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `new'
    from /Users/lexi87/.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `add_tcp_listener'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:96:in `block in parse'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `each'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `parse'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/runner.rb:119:in `load_and_bind'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cluster.rb:302:in `run'
    from /.rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cli.rb:216:in `run'
    from /rvm/gems/Ruby-2.0.0-p353/gems/puma-2.11.3/bin/puma:10:in `<top (required)>'
    from /.rvm/gems/Ruby-2.0.0-p353/bin/puma:23:in `load'
    from /.rvm/gems/Ruby-2.0.0-p353/bin/puma:23:in `<main>'
    from /.rvm/gems/Ruby-2.0.0-p353/bin/Ruby_executable_hooks:15:in `eval'
    from /.rvm/gems/Ruby-2.0.0-p353/bin/Ruby_executable_hooks:15:in `<main>'
107
Cornelius Wilson

vous devez utiliser kill -9 59780 (utilisez lsof -wni tcp:3000 pour voir quel processus utilisé 3000 port et obtenir le pid du processus)

ou vous modifiez simplement votre configuration puma, changez le port TCP tcp://127.0.0.1:3000 de 3000 en 9292 ou un autre port qui n'a pas été utilisé.

ou vous pouvez démarrer votre application Rails en utilisant

bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:3001
249
Zoker

Pour tuer le processus de puma première exécution

    lsof -wni tcp:3000 

pour montrer ce qui utilise le port 3000. Utilisez ensuite le PID fourni avec le résultat pour exécuter le processus de suppression.

Par exemple, après avoir exécuté lsof -wni tcp: 3000, vous obtiendrez peut-être quelque chose comme:

    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    Ruby    3366 dummy    8u  IPv4  16901      0t0  TCP 127.0.0.1:3000 (LISTEN)

Maintenant, exécutez ce qui suit pour tuer le processus. (où 3366 est le PID)

kill -9 3366

Devrait résoudre le problème

106
Sawo Cliff

vous pouvez aussi essayer cette astuce:

ps aux | grep puma

exemple de sortie:

myname           77921   0.0  0.0  2433828   1972 s000  R+   11:17AM   0:00.00 grep puma
myname           67661   0.0  2.3  2680504 191204 s002  S+   11:00AM   0:18.38 puma 3.11.2 (tcp://localhost:3000) [my_proj]

ensuite:

kill 67661
19
ana

Trouvé le script ci-dessous dans ce numéro de github . Ça marche bien pour moi.

#!/usr/bin/env Ruby
port = ARGV.first || 3000
system("Sudo echo kill-server-on #{port}")

pid = `Sudo lsof -iTCP -sTCP:LISTEN -n -P | grep #{port} | awk '{ print $2 }' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?

Vous pouvez soit l'exécuter dans irb ou dans un fichier Ruby.

Pour ce dernier, créez server_killer.rb puis exécutez-le avec Ruby server_killer.rb

2
Flavio Wuensche

Si les solutions ci-dessus ne fonctionnent pas sur Ubuntu/Linux, vous pouvez essayer ceci

Sudo fuser -k -n tcp port

Lancez-le plusieurs fois pour tuer les processus sur votre port de choix. le port pourrait être 3000 par exemple. Vous auriez tué tous les processus si vous ne voyez aucune sortie après avoir exécuté la commande

0
Nsoseka