Introducción
Cuando se utiliza el marco web Ruby on Rails, su aplicación utilizará SQLite como base de datos de forma predeterminada. SQLite es una base de datos relacional ligera, portátil y fácil de usar que funciona especialmente bien en entornos de baja memoria, por lo que funcionará bien en muchos casos. Sin embargo, para aplicaciones altamente complejas que necesiten una integridad de datos más fiable y una extensibilidad programática, una base de datos PostgreSQL será una opción más robusta y flexible. Necesitará realizar pasos adicionales para configurar su instalación de Ruby on Rails para utilizar PostgreSQL.
En este tutorial, configurará un entorno de desarrollo de Ruby on Rails conectado a una base de datos PostgreSQL en un servidor Ubuntu 20.04. Instalará y configurará PostgreSQL, luego probará su configuración creando una aplicación Rails que utilice PostgreSQL como servidor de base de datos.
Prerrequisitos
Este tutorial requiere lo siguiente:
-
Un servidor Ubuntu 20.04 configurado siguiendo la Guía de Configuración Inicial del Servidor para Ubuntu 20.04, incluyendo un usuario no root con privilegios sudo y un firewall.
-
Un entorno de desarrollo Ruby on Rails instalado en tu servidor Ubuntu 20.04. Para configurarlo, sigue la guía Cómo Instalar Ruby on Rails con rbenv en Ubuntu 20.04. Este tutorial utilizará la versión 3.1.2 de Ruby y 7.0.4 de Rails; para obtener información sobre las versiones más recientes, consulta los sitios oficiales de Ruby y Rails.
Paso 1: Instalación de PostgreSQL
Para configurar Ruby on Rails con PostgreSQL como base de datos para tu aplicación web, primero debes instalar la base de datos en tu servidor.
Usando privilegios sudo
, actualiza el índice de paquetes APT para asegurarte de que tus repositorios estén actualizados:
- sudo apt update
A continuación, instala PostgreSQL y sus bibliotecas de desarrollo:
- sudo apt install postgresql postgresql-contrib libpq-dev
En el comando anterior, el paquete postgresql
contiene el programa principal de PostgreSQL, mientras que postgresql-contrib
añade varias funciones que extienden las capacidades de PostgreSQL. libpq-dev
es una biblioteca de PostgreSQL que permite a los clientes enviar consultas y recibir respuestas desde el servidor, lo que permitirá que su aplicación se comunique con su base de datos.
Una vez instalados PostgreSQL y sus dependencias, el siguiente paso es crear un rol que su aplicación Rails utilizará más adelante para crear su base de datos.
Paso 2 – Crear un Nuevo Rol de Base de Datos
En PostgreSQL, los roles se pueden utilizar para organizar permisos y autorizaciones de la misma manera que los usuarios en Linux. En este paso, creará un nuevo rol de superusuario para su nombre de usuario de Linux que le permitirá crear y configurar bases de datos dentro del sistema PostgreSQL.
Para crear un rol de superusuario de PostgreSQL, ejecute el siguiente comando, sustituyendo la palabra resaltada por su nombre de usuario de Ubuntu 20.04:
- sudo -u postgres createuser -s sammy -P
Dado que especificó la bandera -P
, se le pedirá que ingrese una contraseña para su nuevo rol. Ingrese la contraseña deseada, asegurándose de registrarla para poder usarla en un archivo de configuración en un paso posterior.
Utiliza createuser
para crear un rol llamado sammy
(o el nombre de usuario que prefieras). La bandera -s
otorga privilegios de superusuario a este usuario, y sudo -u
te permite ejecutar el comando desde la cuenta postgres
que se crea automáticamente al instalar PostgreSQL.
Nota: Dado que el modo de autenticación para PostgreSQL en Ubuntu comienza como ident
, por defecto un usuario de Ubuntu solo puede operar en PostgreSQL con un rol del mismo nombre. Para obtener más información, consulta la documentación oficial de PostgreSQL sobre autenticación.
Si no utilizaste la bandera -P
y deseas establecer una contraseña para el rol después de crearlo, ingresa a la consola de PostgreSQL con el siguiente comando:
- sudo -u postgres psql
Recibirás la siguiente salida, junto con el indicador para la consola de PostgreSQL:
Outputpsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
La consola de PostgreSQL está indicada por el indicador postgres=#
. En el indicador de PostgreSQL, ingresa este comando para establecer la contraseña para el nuevo rol de la base de datos, reemplazando el nombre resaltado por el que creaste:
- \password sammy
PostgreSQL te pedirá una contraseña. Ingresa tu contraseña deseada en el indicador, luego confírmala.
Ahora, sal de la consola de PostgreSQL ingresando este comando:
- \q
Tu indicador habitual volverá a aparecer.
En este paso, creaste un nuevo rol de PostgreSQL con privilegios de superusuario. Ahora estás listo para crear una nueva aplicación de Rails que utilice este rol para crear una base de datos.
Paso 3: Crear una Nueva Aplicación Rails
Con un rol configurado para PostgreSQL, ahora puedes crear una nueva aplicación Rails que esté configurada para utilizar PostgreSQL como base de datos.
Primero, navega a tu directorio principal:
- cd ~
Crea una nueva aplicación Rails en este directorio, reemplazando nombreapp
con el nombre que desees para tu aplicación:
- rails new appname -d=postgresql
La opción -d=postgresql
establece PostgreSQL como la base de datos.
Una vez que hayas ejecutado este comando, aparecerá una nueva carpeta con el nombre nombreapp
en tu directorio principal, conteniendo todos los elementos de una aplicación Rails básica.
A continuación, ingresa al directorio de la aplicación:
- cd appname
Ahora que has creado una nueva aplicación Rails y te has movido al directorio raíz de tu proyecto, puedes configurar y crear tu base de datos PostgreSQL desde dentro de tu aplicación Rails.
Paso 4: Configurar y Crear tu Base de Datos
Cuando creas las bases de datos de development
y test
para tu aplicación, Rails utilizará el rol de PostgreSQL que creaste para tu nombre de usuario de Ubuntu. Para asegurarte de que Rails cree estas bases de datos, modificarás el archivo de configuración de la base de datos de tu proyecto. Luego, crearás tus bases de datos.
Uno de los cambios de configuración que debes hacer para tu aplicación Rails es agregar la contraseña del rol de PostgreSQL creado en el último paso. Para mantener segura la información sensible como las contraseñas, se recomienda almacenar la contraseña en una variable de entorno en lugar de escribirla directamente en tu archivo de configuración.
Para almacenar tu contraseña en una variable de entorno al iniciar sesión, ejecuta el siguiente comando, reemplazando APPNAME
con el nombre de tu aplicación y PostgreSQL_Role_Password
con la contraseña que creaste en el último paso:
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
Este comando escribe el comando export
en tu archivo ~/.bashrc
para que la variable de entorno se establezca al iniciar sesión.
Para exportar la variable para tu sesión actual, usa el comando source
:
- source ~/.bashrc
Ahora que has almacenado tu contraseña en tu entorno, puedes modificar el archivo de configuración.
Abre el archivo de configuración de la base de datos de tu aplicación en tu editor de texto preferido. Este tutorial usará nano
:
- nano config/database.yml
Bajo la sección default
, encuentra la línea que dice pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
y agrega las siguientes líneas resaltadas, completando tus credenciales y la variable de entorno que creaste. Debería lucir algo como esto:
...
default: &default
adapter: postgresql
encoding: unicode
# Para obtener detalles sobre el agrupamiento de conexiones, consulte la guía de configuración de Rails
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>
development:
<<: *default
database: appname_development
...
Esta actualización hará que la aplicación de Rails ejecute la base de datos con el rol y la contraseña correctos. Guarde y salga presionando CTRL
+ x
, Y
, luego ENTER
.
Para obtener más información sobre la configuración de bases de datos en Rails, consulte la documentación de Rails.
Ahora que ha realizado cambios en config/database.yml
, cree las bases de datos de su aplicación utilizando el comando rails
:
- rails db:create
Una vez que Rails crea la base de datos, recibirá la siguiente salida:
OutputCreated database 'appname_development'
Created database 'appname_test'
Como sugiere la salida, este comando creó una base de datos development
y test
en su servidor PostgreSQL.
Ahora tiene una base de datos PostgreSQL conectada a su aplicación de Rails. Para asegurarse de que su aplicación esté funcionando, ahora probará su configuración.
Paso 5 – Prueba de su configuración
Para probar que su aplicación pueda usar la base de datos PostgreSQL, ejecutará su aplicación web para que aparezca en un navegador.
Usando el comando rails server
, ejecute su aplicación web en el servidor web incorporado en su aplicación de Rails, Puma:
- rails server --binding=127.0.0.1
El parámetro --binding
vincula tu aplicación a una IP específica. De forma predeterminada, esta bandera vinculará Rails a 0.0.0.0
, lo que significa que Rails escuchará en todas las interfaces, por lo que es más seguro usar 127.0.0.1
para especificar el localhost
. Por defecto, la aplicación escucha en el puerto 3000
.
Una vez que tu aplicación de Rails esté en funcionamiento, tu indicador de comando desaparecerá, reemplazado por esta salida:
Output=> Booting Puma
=> Rails 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
* Min threads: 5
* Max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop
Para probar si tu aplicación está en funcionamiento, abre una nueva ventana de terminal en tu servidor y utiliza el comando curl
para enviar una solicitud a 127.0.0.1:3000
:
- curl http://127.0.0.1:3000
Recibirás mucha salida en HTML, terminando en algo como:
Output...
<strong>Rails version:</strong> 7.0.4<br />
<strong>Ruby version:</strong> 3.1.2 (x86_64-linux)
</p>
</section>
</div>
</body>
</html>
Si tu aplicación de Rails está en un servidor remoto y deseas acceder a ella a través de un navegador web, puedes vincularla a la dirección IP pública de tu servidor. Primero, abre el puerto 3000
en tu firewall:
- sudo ufw allow 3000
A continuación, busca la dirección IP pública de tu servidor. Puedes hacerlo ejecutando el siguiente comando curl
:
- curl http://icanhazip.com
Esto devolverá tu dirección IP pública. Úsala con el comando rails server
, sustituyendo server_public_IP
por la IP pública de tu servidor:
- rails server --binding=server_public_IP
Ahora podrás acceder a tu aplicación de Rails en un navegador web local a través de la dirección IP pública del servidor en el puerto 3000
visitando:
http://server_public_IP:3000
En esta URL, encontrarás una página de Ruby on Rails:
Si puedes acceder a la página de inicio, significa que tu aplicación está correctamente configurada y conectada a la base de datos PostgreSQL.
Después de probar la configuración, si desea cerrar el puerto 3000
, utilice el siguiente comando.
- sudo ufw delete allow 3000
Conclusión
En este tutorial, creaste una aplicación web Ruby on Rails configurada para usar PostgreSQL como base de datos en un servidor Ubuntu 20.04. Si desea aprender más sobre el lenguaje de programación Ruby, eche un vistazo a nuestra serie sobre Cómo Codificar en Ruby.
Para obtener más información sobre cómo elegir una base de datos para su aplicación, consulte nuestro tutorial sobre las diferencias y casos de uso de SQLite, PostgreSQL y MySQL. Si desea leer más sobre cómo utilizar bases de datos, consulte el artículo Una Introducción a las Consultas en PostgreSQL o explore el producto Managed Databases de DigitalOcean.