2009-09-25 15 views
30

Ich bin sehr neu zu Ruby on Rails als ich versuchte, das offizielle "Erste Schritte" Ruby on Rails Tutorial zu folgen, war ich ein bisschen enttäuscht, weil es sehr schnell schief gelaufen ist. Grundsätzlich hieß es:Warum verwendet Ruby on Rails http://0.0.0.0:3000 anstelle von http: // localhost: 3000?

... navigieren Sie zu http://localhost:3000. Sie sollten die Standard-Informationsseite von Rails sehen.

Aber wenn ich den Anweisungen folgen, ich

 
=> Rails 2.3.4 application starting on http://0.0.0.0:3000 

Nachdem beide Adressen versuchen, weiß ich, dass sie auf das gleiche Objekt zeigen, aber kann mir jemand erklären, warum Ruby on Rails verwendet http://0.0.0.0:3000 statt von http://localhost:3000?

Gibt es eine Möglichkeit, den WEBbrick-Server immer mit localhost zu betreiben?

Antwort

49

Localhost bedeutet wörtlich "Ihr lokaler Host", normalerweise identifiziert durch 127.0.0.1 und der gesamte Verkehr zu dieser Adresse wird über eine Loopback-Schnittstelle geroutet. Wenn Ihr Web-Server auf Verbindungen unter 127.0.0.1 wartet, bedeutet dies, dass er nur Anfragen akzeptiert, die von demselben Host kommen.

0.0.0.0 bedeutet, dass Rails auf alle Schnittstellen überwacht, nicht nur die Loopback-Schnittstelle.

+7

Um WEBrick einzurichten, nur auf localhost zu hören, werden externe Verbindungen ignoriert: script/server --binding = 127.0.0.1 – tadman

+5

FYI, die Bindung an 127.0.0.1 beim Hochfahren WEBrick für mich festgelegt, machte meine lokalen Schienen Verbindung (und damit auch externe Web-Verbindungen) viel schneller. Wenn Ihre lokale Verbindung langsam ist, empfehle ich Ihnen, was @tadman vorgeschlagen hat. In Rails 3 ist dies ** rails server --binding = 127.0.0.1 ** –

15

0.0.0.0 bedeutet alle Schnittstellen. Einschließlich 127.0.0.1 a.k.a. localhost.

0

Eigentlich Schienen hat verschiedene Konfigurationsoptionen über, wenn es auf etwas bestimmtes oder alle Schnittstellen hört.

0

Nur damit jeder weiß, mein Firefox-Browser korrekt angezeigt, die lokal gehostete Server, wenn ich http://localhost:3000/ zugreifen, aber es wird nicht angezeigt, wenn ich http://0.0.0.0:3000/ zuzugreifen versuchen, wie von Ruby empfohlen. In gewissem Sinne sind sie nicht gleichwertig.

Ich bin auf Windows BTW.

+0

'0.0.0.0' ist keine IP-Adresse, auf die Sie mit einem Client zugreifen können. Es ist einfach eine Abkürzung für den Systembindungsaufruf, um _all_ verfügbare IP-Adressen zu verwenden. –

0

Für diejenigen von uns mit Nitrous.io virtuellen Server-Umgebung für die Entwicklung, ich glaube, wir müssen an 0.0.0.0 binden, da es keine localhost per se.

0

Wenn Sie localhost wollen, eine schnelle Art und Weise ist es, die Bindung rails s -blocalhost (und der Port mit -pNNNN weitergeben mit rails s --help) angeben.

Mein Server wurde aus Gründen, die untersucht werden sollen, standardmäßig unter localhost gestartet. Als Ergebnis lvh.me funktioniert nicht mehr, verhindert mich Subdomains (z. B .: www.lvh.me:3000).

I "gelöst" diese Angabe der Bindung:

rails s -b0.0.0.0 # will work with lvh.me 
0

das o für mich Neu-Start funktioniert. (Am Mac v 10.12)