Usar linger con Ruby on Rails

 

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:

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.

  1. Crea un archivo llamado puma.service en el directorio .config/systemd/user:
    [server]$ nano ~/.config/systemd/user/puma.service
  2. 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
  3. 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
  4. Habilita la unidad de usuario para puma:
    [server]$ systemctl --user enable puma
  5. Inicia la unidad con puma:
    [server]$ systemctl --user start puma
  6. 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.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?