¿Cómo ejecutar rails s -p80 en el puerto 80?


87

Por defecto,

 rails s #running on 3000 port

Ahora quiero ejecutarlo en el puerto 80. Así que intenté:

 sudo rails -s -p80

Pero arrojó un error:

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

Usé rvm para instalar ruby ​​& rails. Parece que rvm lo especifica el usuario. ¿No puede encontrar rieles en la raíz?

También probé el siguiente código:

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

Respuestas:


212
rvmsudo rails server -p 80

@pinouchon funciona porque rvmsudosudo más carga rvm como sudo.
— 2013

2
Si, como yo, está usando rbenv en lugar de rvm, este complemento de rbenv hará el equivalente: github.com/dcarley/rbenv-sudo
— micapam

¿Sería esto un riesgo mayor si hay un agujero de seguridad en RVM, dado que se ejecuta como root?
— Kevin Chen

2
@Kevin Chen: No en RVM, pero me preocuparía ejecutar Rails como root. En producción, usaría Apache o Nginx, que necesita permisos de root para reclamar el puerto, pero se ejecuta como un usuario especial. Mi solución es solo para probar cosas en desarrollo.
— 2013

Me cansé de esto, pero obteniendo el socket.rb:206:in enlace ': Dirección ya en uso - bind (2) para 0.0.0.0:80 (Errno :: EADDRINUSE) `error
— r15

23

Simplemente reenvíe la solicitud del puerto 80 al 3000 usando el siguiente comando:

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

Otra opcion es:

rvmsudo rails server -p 80

Sin embargo, recuerde liberar este puerto de Apache u otros servicios que consumen este puerto normalmente. Además, no estoy seguro de que dar permiso de sudo a RVM pueda tener algún problema de seguridad o no.


Esto consumirá dos puertos y no permitirá ejecutar otra instancia de ruby ​​en el puerto 3000.
— Konstantin

¿Cómo revierte esto? Funciona perfectamente para mí, lo cual es genial, pero ¿y si quiero deshacer la redirección? Gracias.
— robins35

Necesito restablecer la tabla de rutas IP a los
— valores

1
Puede revertir este comando reemplazando -Ipor -D, entonces sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Las respuestas aquí son más detalladas: serverfault.com/questions/159544/undoing-port-forwarding .
— bentrevor

8

Iba a sugerir

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

pero eso todavía intenta usar el conjunto de gemas global y no el conjunto de gemas del proyecto de RVM. Entonces...

  1. Asegúrese de que sshd se esté ejecutando en su Mac. (Preferencias del sistema => Compartir => Inicio de sesión remoto marcado)
  2. Asegúrese de que se rails sesté ejecutando en el puerto 3000 como su usuario no root
  3. Abra una nueva terminal y ...

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

(Por cierto, reduzca los duplicados a singulares en la línea anterior, no puedo entender cómo escapar correctamente aquí).

El primero Password:es su rootusuario, el segundo es la contraseña para quien whoamiregrese.

Aunque probablemente desee instalar Phusion Passenger y configurarlo en su Apache local. A menos que solo esté intentando hacer una demostración de algo realmente rápido y, por supuesto, esta no es una solución permanente.


asegúrese de usarlo /usr/bin/which railsen caso de que los rieles
— tengan un

1

Si está utilizando RVM e hizo la configuración predeterminada, no debería utilizar sudo.

Sólo:

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

Sin embargo, 80 es un puerto privilegiado, por lo que debe ejecutarlo como root y deberá seguir las instrucciones para la instalación multiusuario de RVM.


Se requiere root para puertos privilegiados.
— cfeduke

@cfeduke - ¡Oh! Estás en lo correcto.
— Swanand

@marimaf: la documentación ha ido madurando con el tiempo. Aquí está el nuevo enlace: rvm.io/rvm/install
— Swanand

Gracias, esto ayuda a acceder a una máquina virtual MAC desde un host de PC para probar una aplicación de rieles en la que estaba trabajando. En ese caso, aunque tuve que usar la opción -b (vincular) con la dirección IP de la máquina virtual.
— Tom T

-1

puede iniciar el servidor en el puerto 80

rails s -p 80

Si el puerto 80 no se enlaza (otros procesos no están usando el puerto 80).


1
El puerto por debajo de 1024 necesita acceso de root y no puede ejecutar la aplicación hasta que no haya configurado rieles a través de la URL de root. Lo he implementado y probado.
— Dinesh Saini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.