J'ai une application Rails s'exécutant sur localhost: 3000. Je souhaite y accéder depuis un autre ordinateur du même réseau. J'ai l'impression de l'avoir fait facilement auparavant, mais cela me donne un peu de chagrin. Je peux cingler l'adresse IP de l'ordinateur, mais frapper ip: 3000 dans le navigateur ne fonctionne pas. J'ai aussi essayé de lancer Rails s -b ipaddress
, et pas de chance.
Suggestions?
Si vous essayez d’exécuter le serveur sur le port 80, votre pare-feu bloque probablement le port 3000.
Après vous être assuré que votre pare-feu côté serveur est ouvert à la connexion entrante sur les ports élevés (c'est normalement vrai et le port par défaut est 3000, vous n'aurez donc probablement rien à faire), vous devez également démarrer le serveur de la manière suivante:
Rails server -b 0.0.0.0
qui le lie à l'adresse universelle. Il se lie à localhost
par défaut.
En utilisant cette méthode, vous n’avez pas à vous connecter au port 80, mais vous pouvez aimer ceci:
Rails server -b 0.0.0.0 -p 80
(Si vous utilisez rvm, vous devrez peut-être utiliser rvmsudo
)
Pour rendre cette modification plus permanente, éditez votre config/boot.rb
et ajoutez ceci:
require 'Rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
Alors vous ne devriez avoir à utiliser que Rails s
Rails server -b 0.0.0.0 -p 8000
Cela a fonctionné pour moi. Pas de problèmes de pare-feu, et pas besoin de donner des autorisations de super utilisateur.
En supposant que Webrick démarre sans problème, il s'agit à 100% d'un problème de pare-feu. Vous devez indiquer certaines spécifications, telles que le système d'exploitation utilisé par votre hôte et le fait que vous disposiez ou non de privilèges d'administrateur pour contrôler le pare-feu.
Si vous êtes sous Linux et que vous utilisez le service de pare-feu iptables, vous devez ajouter une règle pour accepter le trafic sur le port 3000. Cela ressemblerait à quelque chose comme:
iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
Cette commande serait une solution unique, mais vous auriez besoin d'étendre votre script de règles iptables actuel pour le rendre permanent à chaque démarrage ou ouverture de session par votre système.
Si vous utilisez Windows, selon que vous utilisiez XP ou Vista/7, vous devez effectuer quelque chose de similaire. Je suppose que vous êtes dans l'environnement Vista/7 et qu'il vous suffit de suivre les étapes fournies dans ce guide http://windows.Microsoft.com/en-US/windows7/Open-a -port-in-Windows-Firewall .
Oui, c'était une bonne réponse en général:
Rails server -b 0.0.0.0
Si vous utilisez Ubuntu, vous devez probablement ouvrir le port dans le firewall:
Sudo ufw allow 3000
Si votre système s'exécute dans VirtualBox, vous devez vérifier vos Paramètres réseau.
Dans le cas du mode réseau NAT
, vous devez cliquer sur les options étendues et ensuite sur Port Forwarding. Ajoutez une règle pour le protocole TCP, le port d’hôte 3000 (ou tout autre) et le port d’invité 3000.
Une des raisons est que votre adresse IP n'est pas liée au serveur Rails. Vous pouvez lier l’option ip avec l’option -b.
Usage: Rails server [mongrel, thin etc] [options]
-p, --port=port Runs Rails on the specified port.
Default: 3000
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost
J'utilise contremaître pour gérer mon application basée sur Procfile.
Ajouter -b 0.0.0.0
à ma commande bundle exec Rails s
dans Procfile a fonctionné pour moi.