Greifen Sie von einem anderen Computer im lokalen Netzwerk auf Webrick / Rails zu

73

Ich habe eine Rails-Anwendung, die auf localhost ausgeführt wird: 3000. Ich möchte von einem anderen Computer im selben Netzwerk darauf zugreifen. Ich habe das Gefühl, dass ich das schon einmal mit Leichtigkeit getan habe, aber es macht mir etwas Sorgen. Ich kann die IP des Computers problemlos anpingen, aber das Drücken von ip: 3000 im Browser funktioniert nicht. Ich habe auch versucht zu starten rails s -b ipaddressund kein Glück.

Vorschläge?

Agmcleod
quelle
Haben Sie eine Firewall, die diesen Zugriff blockiert?
Brian
Schwer zu sagen, wie es in meinem Werksnetzwerk ist, nicht zu Hause. Der Computer, auf dem es ausgeführt wird, ist mit dem Subnetz 192.168.100 verbunden. Mein zweiter Computer ist ein Laptop über WLAN, dasselbe Subnetz.
Agmcleod
2
Versuchen Sie es auf Port 80 statt 3000
VNO
Ja, das würde es tun. Funktioniert jetzt :). Wenn Sie möchten, posten Sie Ihre Antwort und ich werde akzeptieren,
Agmcleod
Ich habe das gleiche Problem, obwohl ich bereits Rails auf Port 80 (-p 80) verwende und immer noch nicht von einem anderen Computer im selben Netzwerk darauf zugreifen kann. Ich kann weiterhin von anderen Computern aus auf andere Apps wie SVN und UberSVN zugreifen, aber nicht auf Ruby. Irgendeine Hilfe?
XpiritO

Antworten:

1

Versuchen Sie stattdessen, den Server auf Port 80 auszuführen. Ihre Firewall blockiert wahrscheinlich Port 3000.

VNO
quelle
3
Ich habe dies getan, kann aber immer noch nicht auf myip: 80 zugreifen, weder von demselben Computer noch von einem anderen im selben Netzwerk
marimaf
1
OneHoopyFrood Antwort ist perfekt
Omer Aslam
4
Die Antwort von OneHoopyFrood sollte die überprüfte sein. Diese Antwort ist ziemlich verwaschen
Jereme Causing
184

Nachdem Sie sichergestellt haben, dass Ihre serverseitige Firewall für die eingehende Verbindung an hohen Ports geöffnet ist (dies ist normalerweise der Fall und der Standardport ist 3000, sodass Sie wahrscheinlich nichts tun müssen), müssen Sie den Server auch wie folgt starten:

rails server -b 0.0.0.0

das bindet es an die universelle Adresse. Es bindet localhoststandardmäßig an.

Mit dieser Methode müssen Sie nicht an Port 80 binden, aber Sie können dies mögen:

rails server -b 0.0.0.0 -p 80

(Wenn Sie rvm verwenden, müssen Sie möglicherweise verwenden rvmsudo)


Um diese Änderung dauerhafter zu machen, bearbeiten Sie Ihre config/boot.rbund fügen Sie Folgendes hinzu:

require 'rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge(Host:  '0.0.0.0', Port: 3000)
    end
  end
end

Dann sollten Sie nur noch verwenden müssen rails s

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

OneHoopyFrood
quelle
5
Die gewählte Antwort hat mir nicht geholfen, da die Firewall bereits deaktiviert war.
Nipponese
Ohne Deaktivierung der Firewall funktionierte "Rails Server -b 0.0.0.0" bei mir nicht. Zuerst musste ich die Firewall deaktivieren mit: "sudo ufw disable", dann lief der Server mit: "Rails Server -b 0.0.0.0"
Afzal Masood
1
@AfzalMasood, hört sich so an, als hätten Sie vorkonfiguriert, dass Sie standardmäßig alle ablehnen. Das ist eine gute Praxis! Erlaube einfach Port 3000 in deinen Regeln und es sollte gut spielen. :)
OneHoopyFrood
@OneHoopyFrood Kann sein, aber ich habe nie etwas im Zusammenhang mit der Firewall geändert oder alles durch Defualt abgelehnt.
Afzal Masood
1
Wenn Sie nicht haben rvmsudo, können Sie einfach verwenden sudo rails server -b 0.0.0.0 -p 80 (oder nur sudo rails sbearbeiten boot.rb), wenn Sie Port 80 verwenden möchten.
Sam Soffes
28
rails server -b 0.0.0.0 -p 8000

Das hat bei mir funktioniert. Keine Firewall-Probleme und keine Notwendigkeit, Superuser-Berechtigungen zu erteilen.

Tomascharad
quelle
8
  1. Ja, das war im Allgemeinen eine gute Antwort :

    rails server -b 0.0.0.0
    
  2. Wenn Sie Ubuntu verwenden , müssen Sie wahrscheinlich den Port in der Firewall öffnen :

    sudo ufw allow 3000
    
  3. Wenn Ihr System in VirtualBox ausgeführt wird , müssen Sie Ihre Netzwerkeinstellungen überprüfen .

    Im Netzwerkmodus NATmüssen Sie auf die erweiterten Optionen und dort auf Portweiterleitung klicken . Fügen Sie eine Regel für TCP-Protokoll, Host-Port 3000 (oder einen anderen) und Gast-Port 3000 hinzu.

Schönheit
quelle
4

Angenommen, Webrick startet ohne Probleme, ist dies zu 100% ein Firewall-Problem. Sie sollten einige Spezifikationen angeben, z. B. welches Betriebssystem auf Ihrem Host ausgeführt wird und ob Sie über Administratorrechte für die Steuerung der Firewall verfügen.

Wenn Sie unter Linux arbeiten und den iptables-Firewalldienst ausführen, müssen Sie eine Regel hinzufügen, um Datenverkehr über Port 3000 zu akzeptieren. Es sieht ungefähr so ​​aus:

iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

Dieser Befehl wäre jedoch eine einmalige Lösung. Sie müssten Ihr aktuelles iptables-Regelskript erweitern, um es bei jedem Systemstart oder bei jeder Anmeldung dauerhaft zu machen.

Wenn Sie Windows ausführen, müssen Sie je nachdem, ob Sie XP oder Vista / 7 ausführen, etwas Ähnliches tun. Ich gehe davon aus, dass Sie sich in der Vista / 7-Umgebung befinden und nur die in diesem Handbuch beschriebenen Schritte ausführen müssen: http://windows.microsoft.com/en-US/windows7/Open-a-port -in-Windows-Firewall .

Lester Peabody
quelle
1

Ich verwende Foreman, um meine Procfile-basierte Anwendung zu verwalten.

Das Hinzufügen -b 0.0.0.0zu meinem bundle exec rails sBefehl in Procfile hat für mich funktioniert.

Mosab.Mohamed
quelle
0

Ein Grund ist, dass Ihre IP nicht an den Rails-Server gebunden ist. Sie können die IP mit der Befehlsoption -b binden.

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