ruby - ¿Cómo empezar delgado en el puerto predeterminado?
thin (9)
Estoy aprendiendo thin server, ahora puedo usar thin start
para encender el servidor, pero el puerto es 3000, debo escribir localhost: 3000 en el navegador para obtener la página web.
Quiero quitar el puerto 3000 como lo hacemos normalmente con otro sitio. Así que configuro usar el comando thin -p 80 start
para usar el puerto http predeterminado. Pero tengo este error:
root@makserver:~/apps/videosite# thin --port 80 start
>> Using rack adapter
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:80, CTRL+C to stop
/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server'': no acceptor (RuntimeError)
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/tcp_server.rb:16:in `connect''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:49:in `block in start''
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call''
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine''
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:57:in `start''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/server.rb:156:in `start''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:80:in `start''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!''
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/bin/thin:6:in `<top (required)>''
from /usr/local/bin/thin:19:in `load''
from /usr/local/bin/thin:19:in `<main>''
Echa un vistazo a este hilo Ruby en las opciones del servidor Rails
no se recomienda exponer ''thin'' directamente a Internet a través del puerto 80. Debe usar Apache como servidor web y redirigir la solicitud http al servidor de aplicaciones thin. puede agregar esto a su httpd.conf para redirigir el tráfico a los rieles
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ServerName YOUR SERVER NAME
DocumentRoot YOUR ROOT
ProxyPass / http://YOURSITE.com:3000/
ProxyPassReverse / http://YOURSITE.com:3000/
ProxyPreserveHost On
</VirtualHost>
Esto indica que el puerto podría estar ya en uso.
Además, intente ejecutarlo con privilegios de administrador
sudo thin start -p 80
(Gracias a Tom Crinson por su article blog).
No podía hacer que Thin se ejecute en el puerto 80 usando sudo
porque había instalado Ruby usando RVM y el usuario root no tenía acceso a él. Además, tuve que establecer una variable de entorno antes de ejecutar Thin para configurar mi URL de acceso mongodb. La siguiente línea lo hizo por mí:
rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
Parece que un viejo proceso de Ruby ha colgado en alguna parte.
Activa el monitor de actividad y elimina todos los procesos de Ruby.
O utilice el terminal:
ps -e | grep "ruby"
entonces:
kill {process id}
Puedes intentar usar el puerto 8080. Lo hacemos con nuestras aplicaciones GWT y es más conveniente de todos modos, en lugar de 3000.
Si no desea ejecutar sudo para iniciar el servidor web (tal vez el usuario no es un sudoer), siempre puede ingresar como superusuario y configurar la redirección del tráfico del puerto 80 al puerto x:
sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 3000
Para buscar las iptables
sudo iptables --list -n -t nat
sudo iptables --list -n
De esta manera puede ejecutar el servidor web como otro usuario que no tiene privilegios.
Tal vez intente "sudo bundle exec thin start -p 80"?
Tradicionalmente, el puerto 80 es un puerto privilegiado (en realidad, todos los que están por debajo de 1024), por lo que es necesario tener privilegios de superusuario para vincularlo.
Mirando los documentos, sugieren que se ejecute detrás de nginx
, lo que generalmente es una buena idea. Suponiendo que utilizó su administrador de paquetes para instalar nginx
, probablemente recibió instrucciones sobre cómo hacer que nginx
inicie en el arranque, y se vinculará al puerto 80 de manera predeterminada.
rvmsudo rails server thin -p 80