C9 IDE ft. Rails & Postgresql

--

Durante mi experiencia desarrollando mi aplicación web con el framework Ruby on Rails mi equipo y yo nos enfrentamos con un problema, ya que no creamos la aplicación en un principio con Postgresql y se creó por default con SQLite. A medio desarrollo de la aplicación decidimos empezar a migrarla y nos tomó más de un intento,y fue más sencillo de lo que parecía y en internet había muchas respuestas con comandos y configuraciones diferentes.

Si tienes el mismo problema y te quieres migrar de base de datos, lo primero que tienes que hacer es instalar en el Gemfile la gema de Postgresql

gem 'pg',   '0.18.4'

Seguido del comando bundle install para instalar las gemas de tu Gemfile

~/workspace/app $ bundle install

Lo siguiente es configurar el archivo app/config/database.yml, este archivo contiene toda la configuración de cómo está definida la conexión a nuestras bases de datos

default: &default
adapter: postgresql
encoding: SQL_ASCII
pool: 5
username: ubuntu
password: password
development:
<<: *default
database: development
test:
<<: *default
database: test
production:
<<: *default
database: production

después necesitamos iniciar el servicio de Postgresql en la terminal de c9

$ sudo service postgresql start

Seguido nos tendremos que conectar con el servicio para configurar cada apartado que escribimos en el database.yml (usuario, contraseña, bases de datos)

$psql

Algunos comandos dentro de PSQL:

Para mostrar las bases de datos

ubuntu=# \l

Para seleccionar alguna base de datos

ubuntu=# \c NombreDeLaBD

Para mostrar todas las tablas de la base de datos seleccionada

NombreDeLaBD=# \d

Para seleccionar una tabla en especifico

NombreDeLaBD=# \d NombreTabla

Para obtener algún dato, ingresa la consulta deseada (no olvides el ; para ejecutar la consulta)

NombreDeLaBD=# SELECT * FROM NombreTabla;

Muy importante, para salirte de las ventanas y del cliente de PSQL puedes utilizar el comando “CTRL + d” ó

\q

Por default en c9, al conectarnos con el servicio de Postgresql iniciaremos con el usuario “ubuntu”, para cambiar o asignarle una contraseña a este usuario, ingresamos

ubuntu=# \password
Enter new password:

recuerda que este usuario y contraseña tienen que ser los mismos que los que declaramos en el archivo app/config/database.yml

Seguido tenemos que crear las bases de datos declaradas en nuestro archivo app/config/database.yml , ya sea para development, test y production

ubuntu=# CREATE DATABASE development;
ubuntu=# CREATE DATABASE test;
ubuntu=# CREATE DATABASE production;

no olvides escribir “;” después de cada instrucción, si deseas eliminar alguna base de datos, ingresa

ubuntu=# DROP DATABASE development;

Ya para finalizar tenemos que salirnos de nuestra conexión con el servicio de psql y tendremos que migrar y reiniciar la base de datos de nuestra aplicación en rails

~/workspace/app $ rails db:migrate:reset

Si ya creaste los seeds de tu aplicación

~/workspace/app $ rails db:seed

Si tus migraciones están bien hechas y tu app/config/database.yml esta bien configurado, no tendrás ningún problema.

Si tu aplicación va a usar el formato de codificación UTF-8 tendrás que realizar varias modificaciones en el archivo app/config/database.yml y en el servicio de Postgresql.

Primero que nada tendremos que cambiar en database.yml el método de codificación en encoding por UTF8

default: &default
adapter: postgresql
encoding: UTF8
pool: 5
username: ubuntu
password: password
development:
<<: *default
database: development
test:
<<: *default
database: test
production:
<<: *default
database: production

Seguido nos conectamos al servicio de Postgresql para modificar los templates que ya trae Postgresql

update pg_database set datallowconn = TRUE where datname = 'template0';
\c template0
update pg_database set datistemplate = FALSE where datname = 'template1';
drop database template1;
create database template1 with template = template0 encoding = 'UTF8';
update pg_database set datistemplate = TRUE where datname = 'template1';
\c template1
update pg_database set datallowconn = FALSE where datname = 'template0';

y ahora creamos las bases de datos (development, test, production) con la nueva codificación UTF-8

ubuntu=# CREATE DATABASE development ENCODING = 'UTF8';
ubuntu=# CREATE DATABASE test ENCODING = 'UTF8';
ubuntu=# CREATE DATABASE production ENCODING = 'UTF8';

Para finalizar, tendremos que migrar y reiniciar la base de datos de nuestra aplicación de Rails

~/workspace/app $ rails db:migrate:reset

--

--