Wie laufen Schienen s -p80 auf 80 Port?

87

Standardmäßig,

 rails s #running on 3000 port

Jetzt möchte ich es auf Port 80 ausführen. Also habe ich versucht:

 sudo rails -s -p80

Aber es warf einen Fehler:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found

Ich habe rvm verwendet, um Ruby & Rails zu installieren. Es scheint, dass rvm vom Benutzer angegeben wurde. Kann es keine Schienen in der Wurzel finden?

Ich habe auch den folgenden Code ausprobiert:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ which rails
/home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails
mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails s -p80
mlzboy
quelle

Antworten:

212
rvmsudo rails server -p 80
iain
quelle
@pinouchon es funktioniert, weil rvmsudosudo plus rvm als sudo lädt.
iain
2
Wenn Sie wie ich rbenv anstelle von rvm verwenden, wird dieses rbenv-Plugin das Gleiche tun: github.com/dcarley/rbenv-sudo
micapam
Wäre dies ein größeres Risiko, wenn RVM eine Sicherheitslücke aufweist, da es als Root ausgeführt wird?
Kevin Chen
2
@ Kevin Chen: Nicht in RVM, aber ich würde mir Sorgen machen, Rails als Root auszuführen. In der Produktion würden Sie Apache oder Nginx verwenden, die Root-Berechtigungen benötigen, um den Port zu beanspruchen, aber als spezieller Benutzer ausgeführt werden. Meine Lösung besteht nur darin, Dinge in der Entwicklung zu testen.
iain
Ich habe es satt, aber die socket.rb:206:in Bindung bekommen ': Adresse bereits verwendet - bind (2) für 0.0.0.0:80 (Errno :: EADDRINUSE) `error
r15
23

Leiten Sie die Anfrage einfach mit dem folgenden Befehl von Port 80 an 3000 weiter:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

Eine weitere Option ist:

rvmsudo rails server -p 80

Denken Sie jedoch daran, diesen Port von Apache oder anderen Diensten freizugeben, die diesen Port normalerweise nutzen. Ich bin mir auch nicht sicher, ob die Erteilung der Sudo-Erlaubnis an RVM ein Sicherheitsproblem hat oder nicht.

Dinesh Saini
quelle
Dies wird zwei Ports verbrauchen und es wird nicht erlaubt, eine weitere Ruby-Instanz auf Port 3000 auszuführen.
Konstantin
Wie kehren Sie das um? Es funktioniert perfekt für mich, was großartig ist, aber was ist, wenn ich die Weiterleitung rückgängig machen möchte? Vielen Dank.
robins35
müssen die IP-Routentabelle auf Standard zurücksetzen
Dinesh Saini
1
Sie können diesen Befehl rückgängig machen, indem der Austausch -Imit -D, so sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Die Antworten hier werden ausführlicher: serverfault.com/questions/159544/undoing-port-forwarding .
Bentrevor
8

Wollte vorschlagen

rails=`which rails` ; sudo $rails server -p 80

Aber das versucht immer noch, das globale Gemset und nicht das Projekt-Gemset von RVM zu verwenden. So...

  1. Stellen Sie sicher, dass sshd auf Ihrem Mac ausgeführt wird. (Systemeinstellungen => Freigabe => Remote-Anmeldung aktiviert)
  2. Stellen Sie sicher rails s, dass Port 3000 als Nicht-Root-Benutzer ausgeführt wird
  3. Öffnen Sie ein neues Terminal und ...

    me=``whoami``; sudo ssh -L 80:127.0.0.1:3000 -l $me -N localhost

(Übrigens, reduzieren Sie die Duplikate in der obigen Zeile auf einzelne, ich kann nicht herausfinden, wie ich es hier richtig entkommen kann.)

Der erste Password:ist Ihr rootBenutzer, der zweite ist das Passwort für jeden, der whoamizurückkehrt.

Obwohl Sie wahrscheinlich Phusion Passenger installieren und unter Ihrem lokalen Apache einrichten möchten. Es sei denn, Sie versuchen nur, schnell etwas zu demonstrieren, und dies ist natürlich keine dauerhafte Lösung.

cfeduke
quelle
/usr/bin/which railsStellen Sie sicher, dass Sie für den Fall verwenden, dass Schienen einen Alias ​​haben
david_adler
1

Wenn Sie RVM verwenden und die Standardeinstellung vorgenommen haben, sollten Sie diese nicht verwenden sudo.

Gerade:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ rails server -p 80

Jedoch 80 ist ein privilegierter Port, so dass Sie müssen als root ausführen, und Sie werden die Anweisungen für haben folgen Multi-User Installation von RVM.

Swanand
quelle
root ist für privilegierte Ports erforderlich.
cfeduke
@cfeduke - Oh! Du hast Recht.
Swanand
@marimaf - Die Dokumentation ist im Laufe der Zeit gereift. Hier ist der neue Link: rvm.io/rvm/install
Swanand
Vielen Dank, dies hilft beim Zugriff auf eine MAC-VM von einem PC-Host aus, um eine Rails-App zu testen, an der ich gearbeitet habe. In diesem Fall musste ich allerdings die Option -b (bind) mit der IP-Adresse des VM verwenden.
Tom T
-1

Sie können den Server an Port 80 starten

rails s -p 80

Wenn Port 80 nicht bindet (andere Prozesse verwenden Port 80 nicht).

uma
quelle
1
Ein Port unter 1024 benötigt Root-Zugriff und Sie können die Anwendung erst ausführen, wenn Sie keine Rails über die Root-URL eingerichtet haben. Ich habe es implementiert und getestet.
Dinesh Saini