3
votes

Le serveur Rails refuse de se connecter dans le navigateur

J'essaye juste d'exécuter mon serveur localement. Je suis sur Windows et utiliser Ruby on Rails sur Windows est une douleur, donc j'utilise Vagrant. Je fais toutes ces commandes depuis mon shell Vagrant.

J'ai essayé les rails s et rails s -b 0.0.0.0 . Les deux me donnent des réponses OK dans le terminal:

config.vm.network "forwarded_port", guest: 3000, host: 3000

Cependant, quand je vais à localhost: 3000 dans mon navigateur, cela me donne: p>

curl: (7) Failed to connect to localhost port 3000: Connection refused

Quand j'ai essayé de curl http: // localhost: 3000 get:

This site can't be reached.
localhost refused to connect.

I ont également la ligne de code suivante dans mon fichier Vagrant:

=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.1-p33), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development

Je ne sais vraiment pas quoi faire ensuite. En ce moment, j'installe le fichier ISO d'Ubuntu (cela se fera dans 5 heures, donc c'est un peu de temps) pour créer une instance VirtualBox comme sauvegarde si cela ne fonctionne pas. En espérant pouvoir trouver une solution à ce problème.


2 commentaires

Est-ce là toute la sortie que vous obtenez de rails s -b 0.0.0.0 ? Voici le mien: Puma démarre en mode cluster ... Version 3.12.0 (ruby 2.5.5-p157), nom de code: Llamas in Pyjamas Min threads: 1, max threads: 1 Environnement: développement Process workers: 1 Preloading application Écoute sur tcp : //0.0.0.0: 3000 Utilisez Ctrl-C pour arrêter Worker 0 (pid: 6037) démarré, phase: 0 Une chose clé à rechercher est Écoute sur tcp: //0.0.0.0: 3000 . Peut-être que quelque chose ne va pas dans votre config / puma.rb? Pouvez-vous poster si vous l'avez?


Un moyen simple de tester si le port est ouvert et de retirer les rails et le puma de l'équation - dans le terminal vagrant, faites nc -l 3000 - netcat écoutera sur le port 3000 et affichera tout ce qu'il reçoit. Ensuite, dans votre navigation, connectez-vous à localhost: 3000. nc doit afficher GET / HTTP / 1.1 avec les autres en-têtes http envoyés par le navigateur. S'il n'y a pas de sortie, il y a probablement un problème avec la redirection de port. S'il y a une sortie, il y a probablement un problème avec la configuration des rails.


3 Réponses :


1
votes

L'élément clé ici est "localhost" sur votre boîte Vagrant et "localhost" sur votre machine sont deux choses différentes. La redirection de port peut souvent résoudre ce problème, mais si vous avez deux machines Vagrant utilisant le même port, vous pouvez envoyer du trafic vers le mauvais.

Il est souvent préférable d'obtenir l'adresse IP de la machine Vagrant et de s'y connecter directement. Si cette adresse IP ne cesse de changer, vous pouvez la verrouiller:

config.vm.network "private_network", ip: "172.30.1.5"

Ensuite, vous vous connectez à http://172.130.1.5:3000/ de manière prévisible.


10 commentaires

C'est intéressant. Mais, ce post stackoverflow.com/questions/ 14870900 / how-to-find-the-vagrant‌ -ip dit que la box Vagrant n'a pas d'adresse IP ...? Je pensais que mon IP serait partagée avec Vagrant puisque ce Vagrant est sur ma machine.


Par défaut, il n'a pas d'adresse IP externe, comme dans une adresse accessible en dehors de votre propre machine. Cependant, il a toujours une sorte d'adresse IP. Vous ne pouvez pas partager l'IP sauf via le mode réseau "NAT", qui est une valeur par défaut pour autant que je sache.


J'ai donc ajouté cette ligne de code dans mon Vagrantfile. Ensuite, j'ai couru rails s et je suis allé à http://172.130.1.5:3000/ mais la connexion est toujours refusée. Ma ligne de commande dit Écoute sur tcp: // localhost: 3000 même si j'ai spécifié l'adresse IP de la machine Vagrant.


S'il écoute "localhost", il n'acceptera pas les connexions externes. Vous devez vous lier à 0.0.0.0 comme vous l'avez fait dans votre question avec -b . La liaison à 127.0.0.1 (ou :: 1 en IPv6) signifie que seules les connexions locales sont autorisées et que votre machine Windows n'est pas considérée comme locale, c'est une machine différente du point de vue IP.


Attendez, ce que vous venez de dire n'est-il pas contradictoire? La liaison n'autorise que les hôtes locaux et ma machine Windows n'est pas considérée comme locale. Alors ... ça ne va pas m'empêcher de me connecter au serveur? Quoi qu'il en soit, j'ai essayé cela, en exécutant rails s -b 0.0.0.0 et en allant à http://172.130.1.5:3000/ mais cela a toujours échoué. Cela n'a aucun sens pourquoi la ligne de commande continue de dire: Écoute sur tcp: // localhost: 3000


Oh, vous devez dire qu'en liant le réseau privé à cette adresse IP, ma machine et la machine Vagrant sont considérées comme locales.


Il y a une différence entre «local» comme dans «même machine physique» et «local» comme «localhost» sur la pile IP.


continuons cette discussion dans le chat .


Si la redirection de port est activée, il n'est pas nécessaire de se connecter à l'adresse IP de la VM. Vous verriez également une erreur lors du démarrage de la VM si une autre VM utilisait déjà ce port.


Ce n'était pas le problème. Mais j'ai fini par faire fonctionner mon serveur Rails en utilisant VB.



0
votes

Résolu en exécutant Ruby on Rails sur la machine UBUNTU VirtualBox.


0 commentaires

2
votes

Je voudrais vous suggérer docker. Docker n'est pas nouveau, il a été lancé en 2012 et est depuis devenu l'une des technologies à la croissance la plus rapide dans le développement Web et les devops.

Certains des avantages que vous aurez si vous commencez à l'utiliser:

  • Reproductibilité: un conteneur Docker est garanti identique sur tout système pouvant exécuter docker et disposant d'un fichier simple, vous (et les membres de votre équipe) pouvez exécuter le système avec les mêmes spécifications très rapidement sur un autre environnement.
  • Isolation: les dépendances ou les paramètres dans un conteneur n'affecteront aucune installation ou configuration sur votre ordinateur.
  • Hub: des milliers d'images bien entretenues sont disponibles y compris ruby ​​ et vous pouvez utiliser eux pour une expérience plus rapide et entrer dans les choses qui comptent.
  • Docker n'est pas vagabond , c'est bien plus et bien plus puissant.
  • Mises à jour d'images faciles: comme les images sont versionnées, il suffit de changer une seule balise.

Bon codage avec la baleine!


1 commentaires

J'y jetterais un œil! Merci filipe: p