Migrado una aplicación de PHP a Ruby On Rails
August 19, 2020
Migrar proyectos existentes sobre todo de PHP hacia una version actualizada o un nuevo framework muchas veces puede ser algo tedioso y complicado ya que necesitamos mantener o migrar la información que ya esta almacenada en la base de datos.
Desde que conoci Ruby on Rails me parecio un framework perfecto para el desarrollo agil y prototipado (no es que no sea un lenguaje para produccion, es usado por Twitter y Github en produccion) debido a su flexibilidad, sencillez y que permite escalar rapidamente.
Paso 1 - Crear la aplicacion de Rails
$ rails new [APP_NAME] -d mysql
Paso 2 - Configuremos la BD
Creamos un volumen para no perder la informacion al terminar los procesos:
$ docker volume create mysql-db-data
Descargamos la imagen de Docker con MySQL y agregamos el volumen para persistir los datos.
$ docker run -d -p 3306:3306 --name mysql-db -e MYSQL_ROOT_PASSWORD=secret --mount src=mysql-db-data,dst=/var/lib/mysql mysql
Cargar la Base de datos dentro del contenedor:
# en mi caso estoy probando la terminal de windows
& cmd.exe /c "docker exec -i mysql-db mysql -psecret pollitos < pollitos.sql"
Luego podemos ingresar a la base de datos con el siguiente comando:
$ docker exec -it mysql-db mysql -p
y ahora en database.yml
agregaremos las configuraciones necesarias para conectarnos al servirdor
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: <% your db server username %>
password: <% your db server password %>
socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: <% your existing db name %>
Paso 3 - Instalando las dependencias (gemas) necesarias
$ gem install schema_to_scaffold
Paso 4 - Generaremos el schema
Generaremos el archivo schema.rb basado en la base de datos existente
$ rails db:schema:dump
Paso 5 - Generaremos los comandos de Scaffolding
$ scaffold -c -p ~/path_to_rails_app/db/schema.rb
Paso 6 - Actualicemos un poco las tablas para seguir las convenciones de Rails
CREATE TABLE table_name (
.
.
created_at DATETIME DEFAULT NULL,
updated_at DATETIME DEFAULT NULL
);
Paso 7 - Ejecuteremos los comandos para generar los CRUD
$ rails generate scaffold Article title:string body:text
Paso 8 - Eliminaremos los archivos de migracion
$ rm -rf ~/path_to_rails_app/db/migrate
Paso 9 - Vamos con Rails!
$ rails s