Generalidades
Este artículo explica cómo ejecutar Puma con Ruby on Rails utilizando Linger. Esta combinación permite que tu aplicación ejecute procesos persistentes y que tus servicios se reinicien si tu aplicación se cae o el servidor se reinicia.
Requisitos previos
Este artículo asume que has completado los siguientes pasos:
- Mejorado a un alojamiento VPS o un plan Dedicado
- Configurado un Servidor Proxy en el panel
- Agregado un subdominio para alojar tus activos estáticos.
- Crea un usuario Shell y asegúrate de poder iniciar sesión en tu servidor a través de SSH.
Configurar Ruby on Rails
Los siguientes pasos configuran tu aplicación Ruby on Rails con Puma y Linger.
Instalar Ruby y Rails
Instalar Ruby y Rails usando las siguientes guias.
Ruby
Ruby: Revisa el artículo Administrador de versiones de Ruby (RVM) para instalar una nueva versión de Ruby en tu VPS.
Rails: Revisa los pasos #1-7.3 en esta guía para configurar Rails. La guía usa el nombre de la aplicación Rails blog, pero puedes nombrarla como desees.
Instalar Puma
Revisa las siguientes guías para ver los pasos sobre la instalación de Puma:
Editar el archivo puma.rb
Navega al siguiente directorio:
[server]$ cd /home/username/example.com/blog/config
Edita el archivo puma.rb para cambiar el número de puerto predeterminado al puerto que elegiste al crear el Servidor Proxy en el panel. Este ejemplo utiliza el puerto 8003:
port ENV.fetch("PORT") {8003}
Inicia el servidor web Puma
Navega al siguiente directorio:
[server]$ cd /home/username/example.com/blog/
Corre el siguiente comando:
[server]$ bin/rails server
Para parar el servidor, presiona CTRL + C.
Solucionar un error
Si recibes un error de host bloqueado acerca de tu dominio de la aplicación, necesitarás agregar una línea al archivo development.rb. Navega al siguiente directorio:
[server]$ cd /home/username/example.com/blog/config/environments/
Edita el archivo development.rb. Debajo de la línea config.enable_reloading = true, agrega lo siguiente:
config.hosts << /example\.com/
Reinicia tu VPS e inicia Puma de nuevo. El error ya deberá estar resuelto.
Instalar Linger
Para instalar linger bajo tu usuario, inicia sesión en tu servidor a través de SSH y corre el siguiente comando:
[server]$ loginctl enable-linger
Este comando no responderá con ninguna salida.
Configurar Puma para las unidades del usuario Systemd
Este paso configura Puma para unidades de usuario de Systemd. Revisa la guía oficial para más detalles.
- Crea un archivo llamado puma.service en el directorio .config/systemd/user:
[server]$ nano ~/.config/systemd/user/puma.service
-
Agrega el siguiente código a este archivo:
[Unit] Description=Puma instance to serve application After=network.target [Service] WorkingDirectory=/path/to/your/app ExecStart=/path/to/your/app/bin/puma -C config/puma.rb -e production ExecReload=/bin/kill -s HUP $MAINPID KillMode=mixed TimeoutStopSec=5 PrivateTmp=true Restart=on-failure [Install] WantedBy=default.target
- Edita las líneas resaltadas de arriba como se aparece a continuación:
- WorkingDirectory: La ruta a la aplicación de tu sitio web.
- ExecStart: La tura a tu instalación de Puma.
Si estás usando un entorno personalizado para tu configuración de Ruby/Puma, asegúrate de definir las rutas de los directorios de tu entorno en la sección [Service] de tu archivo de servicio Systemd de Linger.
[Unit] Description=Puma server to serve application After=network.target [Service] WorkingDirectory=/path/to/your/app ExecStart=/path/to/your/app/bin/puma -C config/puma.rb -e production ExecReload=/bin/kill -s HUP $MAINPID Environment=GEM_PATH=/path/to/your/.rvm/gem-VERSION@global Environment=GEM_HOME=/path/to/your/.rvm/gems/ruby-VERSION Environment=PATH=/path/to/your/.rvm/gems/ruby-VERSION/bin:/path/to/your/.rvm/gem-VERSION@global/bin:/path/to/your..rvm/rubies/ruby-VERSION/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/APP:/usr/local/APP:/snap/bin:/path/to/your/.rvm/bin KillMode=mixed TimeoutStopSec=5 PrivateTmp=true Restart=on-failure PIDFile=/tmp/puma.pid [Install] WantedBy=default.target
- Habilita la unidad de usuario para puma:
[server]$ systemctl --user enable puma
- Inicia la unidad con puma:
[server]$ systemctl --user start puma
- Confirma que está corriendo:
[server]$ systemctl --user status puma
Los servicios de tu aplicación ahora se reiniciarán automáticamente cuando el servidor se reinicie o si la aplicación se cae.