Cómo configurar PostgreSQL para que funcione con Ruby on Rails
En diciembre del año pasado publicamos un tutorial sobre cómo instalar Ruby on Rails desde las fuentes oficiales sobre Ubuntu y Fedora, algo que requiere de la compilación previa de Ruby antes de instalar la gem Rails, que es el conocido framework para crear aplicaciones web.
Sin embargo, en aquella ocasión el usuario solo podía utilizar el Sistema Gestor de Bases de Datos (SGBD) Sqlite, que posiblemente puede terminar quedándose corto para grandes proyectos, así que hoy publicaremos cómo preparar PostgreSQL para utilizarlo con Ruby on Rails, abarcando las mismas distribuciones, aunque no exactamente las mismas versiones, que en el tutorial anterior.
Paquetes para instalar PostgreSQL y cómo ponerlo en funcionamiento
La instalación de PostgreSQL y los componentes necesarios para el desarrollo se realiza a través de los siguientes paquetes en Ubuntu 16.04 y Ubuntu 18.04:
sudo apt-get install postgresql postgresql-contrib libpq-dev
Mientras que para Fedora 28 lo que es requiere instalar es esto:
sudo dnf install postgresql postgresql-server postgresql-contrib libpqxx-devel
En Fedora se debe realizar un paso adicional para poder arrancar PostgreSQL a través de systemd, que es el siguiente:
sudo postgresql-setup --initdb --unit postgresql
Llegados a este punto, tanto en Ubuntu como en Fedora se puede iniciar PostgreSQL empleando systemd:
sudo systemctl start postgresql
Si se quiere que el SGBD se inicie con el sistema (cosa que en Ubuntu se configura por defecto, pero no en Fedora) solo hay que poner enable en lugar de start:
sudo systemctl enable postgresql
Si se quiere hacer lo contrario, solo hay que poner disable en el mismo sitio para que el servicio no se inicie con el arranque del sistema:
sudo systemctl disable postgresql
Y ya que estamos detallando cómo gestionar de forma básica el servicio, ponemos los comandos para detenerlo y reiniciarlo.
Detener:
sudo systemctl stop postgresql
Reiniciar:
sudo systemctl restart postgresql
En caso de querer instalar otra versión de PostgreSQL se puede recurrir a su página de descargas, que contiene instrucciones con repositorios para algunos sistemas operativos concretos.
Cómo configurar PostgreSQL para que funcione con Ruby on Rails
Tras poner en marcha el SGBD, ahora lo que hay que llevar a cabo es la configuración del mismo servicio para que pueda ser usado con el framework Ruby on Rails.
Lo primero que se tiene que hacer es configurar un usuario para el SGBD con el mismo nombre que el que está en ejecución en el sistema. Para obtener el nombre del usuario solo hay que ejecutar el siguiente comando:
echo $USER
Supongamos que el resulto obtenido es “tuusuario”, así que el comando para configurar el usuario de PostgreSQL es el siguiente:
sudo -u postgres createuser -s tuusuario
Si se quiere establecer una contraseña a nivel del SGBD habrá que acceder a la CLI de PostgreSQL, aunque antes de este paso sería recomendable crear otro usuario cuyo nombre puede inventarse (sí, el del nombre coincidente es mejor que se quede sin contraseña a nivel del SGBD):
sudo -u postgres psql
Una vez dentro, el usuario verá delante “postgres=#”. Este es el comando a introducir para establecer una contraseña:
\password tuusuario
Para salirse de la CLI de PostgreSQL hay que introducir lo siguiente:
\q
Configurar un proyecto de Ruby on Rails para que funcione con PostgreSQL
Antes que nada, es importante asegurarse de que el servicio del SGBD esté en funcionamiento, algo que se puede comprobar de la siguiente manera:
sudo systemctl status postgresql.service
Tras comprobar que el servicio está realmente activo, se procede a crear el proyecto de Ruby on Rails:
rails new ApliPrueba --database=postgresql
Después se accede al subdirectorio del proyecto:
cd ApliPrueba
Para luego crear y migrar la base de datos:
rails db:create
rails db:migrate
La configuración de la base de datos se ubica en el fichero “config/database.yml” dentro del proyecto de Rails. Aquí pondremos un pequeño ejemplo de configuración con un usuario inventado, aunque para desarrollar y probar cosas no es necesario modificar nada de lo que esté por defecto:
# PostgreSQL. Versions 9.1 and up are supported. # # Install the pg driver: # gem install pg # On OS X with Homebrew: # gem install pg -- --with-pg-config=/usr/local/bin/pg_config # On OS X with MacPorts: # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem 'pg' # default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> # Añadido para configurar Ruby On Rails para PostgreSQL host: localhost username: muylinux password: muylinux development: <<: *default database: ApliPrueba_development # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. #username: ApliPrueba # The password associated with the postgres role (username). #password: # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. #host: localhost # The TCP port the server listens on. Defaults to 5432. # If your server runs on a different port number, change accordingly. #port: 5432 # Schema search path. The server defaults to $user,public #schema_search_path: myapp,sharedapp,public # Minimum log levels, in increasing order: # debug5, debug4, debug3, debug2, debug1, # log, notice, warning, error, fatal, and panic # Defaults to warning. #min_messages: notice # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: ApliPrueba_test # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password as a unix environment variable when you boot # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full rundown on how to provide these environment variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %> # production: <<: *default database: ApliPrueba_production username: ApliPrueba password: <%= ENV['APLIPRUEBA_DATABASE_PASSWORD'] %>