Comment faire fonctionner les rails s -p80 sur 80 ports?

87

Par défaut,

 rails s #running on 3000 port

Maintenant, je veux l'exécuter sur le port 80. J'ai donc essayé:

 sudo rails -s -p80

Mais cela a jeté une erreur:

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

J'ai utilisé rvm pour installer des rubis et des rails. Il semble que rvm soit spécifié par l'utilisateur. N'est-il pas capable de trouver des rails à la racine?

J'ai également essayé le code ci-dessous:

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
la source

Réponses:

212
rvmsudo rails server -p 80
iain
la source
@pinouchon cela fonctionne parce rvmsudoque sudo plus le chargement de rvm en tant que sudo.
iain
2
Si comme moi vous utilisez rbenv plutôt que rvm, ce plugin rbenv fera l'équivalent: github.com/dcarley/rbenv-sudo
micapam
Serait-ce plus risqué s'il y a une faille de sécurité dans RVM, étant donné qu'il fonctionne en tant que root?
Kevin Chen
2
@Kevin Chen: Pas dans RVM, mais je serais inquiet d'exécuter Rails en tant que root. En production, vous utiliseriez Apache ou Nginx, qui a besoin des autorisations root pour réclamer le port, mais s'exécute en tant qu'utilisateur spécial. Ma solution consiste simplement à tester des éléments en développement.
iain
J'ai fatigué cela mais j'ai obtenu la socket.rb:206:in liaison ': Adresse déjà utilisée - bind (2) pour 0.0.0.0:80 (Errno :: EADDRINUSE) `erreur
r15
23

Transférez simplement la demande du port 80 à 3000 en utilisant la commande ci-dessous:

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

Une autre option est:

rvmsudo rails server -p 80

Cependant, n'oubliez pas de libérer ce port d'Apache ou d'autres services qui consomment ce port normalement. De plus, je ne suis pas sûr que l'autorisation sudo à RVM puisse avoir un problème de sécurité ou non?

Dinesh Saini
la source
Cela consommera deux ports et ne permettra pas d'exécuter une autre instance ruby ​​sur le port 3000.
Konstantin
Comment inversez-vous cela? Cela fonctionne parfaitement pour moi, ce qui est génial, mais que faire si je veux annuler la redirection? Merci.
robins35
besoin de réinitialiser la table de routage IP par défaut
Dinesh Saini
1
Vous pouvez inverser cette commande en remplaçant le -Ipar -D, donc sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Les réponses ici vont plus en détail: serverfault.com/questions/159544/undoing-port-forwarding .
bentrevor
8

Allait suggérer

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

mais qui essaie toujours d'utiliser l'ensemble de gemmes global et non l'ensemble de gemmes de projet de RVM. Donc...

  1. Assurez-vous que sshd est en cours d'exécution sur votre Mac. (Préférences système => Partage => Connexion à distance cochée)
  2. Assurez-vous qu'il rails sfonctionne sur le port 3000 en tant qu'utilisateur non root
  3. Ouvrez un nouveau terminal et ...

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

(BTW réduisez les doublons en singuliers dans la ligne ci-dessus, je ne peux pas comprendre comment l'échapper correctement ici.)

Le premier Password:est votre rootutilisateur, le second est le mot de passe de quiconque whoamirevient.

Bien que vous souhaitiez probablement installer Phusion Passenger et le configurer sous votre Apache local. À moins que vous n'essayiez simplement de faire une démonstration rapide de quelque chose et que ce ne soit pas une solution permanente bien sûr.

cfeduke
la source
assurez-vous d'utiliser /usr/bin/which railsau cas où les rails sont
aliasés
1

Si vous utilisez RVM et que vous avez effectué la configuration par défaut, vous ne devriez pas utiliser sudo.

Juste:

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

Cependant 80 est un port privilégié, vous devez donc exécuter en tant que root, et vous devrez suivre les instructions pour l'installation multi-utilisateur de RVM.

Cygne
la source
root est requis pour les ports privilégiés.
cfeduke
@cfeduke - Oh! Tu as raison.
Swanand
@marimaf - La documentation a mûri au fil du temps. Voici le nouveau lien: rvm.io/rvm/install
Swanand
Merci, cela aide à accéder à une machine virtuelle MAC à partir d'un hôte PC pour tester une application de rails sur laquelle je travaillais. Dans ce cas, j'ai dû utiliser l'option -b (bind) avec l'adresse IP du vm.
Tom T
-1

vous pouvez démarrer le serveur sur le port 80

rails s -p 80

Si le port 80 ne se lie pas (les autres processus n'utilisent pas le port 80).

uma
la source
1
Le port en dessous de 1024 nécessite un accès root et vous ne pouvez pas exécuter l'application tant que vous n'avez pas configuré les rails via l'URL racine. Je l'ai implémenté et testé.
Dinesh Saini