web-dev-qa-db-fra.com

Accédez à webrick/Rails depuis un autre ordinateur du réseau local

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?

55
agmcleod

Si vous essayez d’exécuter le serveur sur le port 80, votre pare-feu bloque probablement le port 3000.

2
VNO

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

Source: https://stackoverflow.com/a/29562898/1795429

148
OneHoopyFrood
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.

21
tomascharad

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 .

4
Lester Peabody
  1. Oui, c'était une bonne réponse en général

    Rails server -b 0.0.0.0
    
  2. Si vous utilisez Ubuntu, vous devez probablement ouvrir le port dans le firewall:

    Sudo ufw allow 3000
    
  3. 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.

4
Beauty

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
0
lsc

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.

0
Mosab.Mohamed