Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

¿Qué son las migraciones? Migraciones en Sequelize ORM

13/27
Recursos

Aportes 8

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Ya he visto varios archivos que terminan en rc, solo para satisfacer mi curiosidad lo investigue y les comparto:
rc: “run commands”, se usa en sistemas unix como pre-ejecutador de un archivo, carga esos comandos antes de proceder con la rutina normal de ejecución

Las migraciones son:

Las migraciones son la forma en que Django propaga cambios en los modelos y los refleja en el esquema de bases de datos. - Django.

Las migraciones son como un sistema de control de versiones para la base de datos. - Laravel.

Es como un sistema de control de versiones para manejar los cambios desde el código y trackear los cambios en la base de datos. - Sequelize.

Básicamente, las migraciones mantienen el historial del esquema que se lleva en la base de datos. Es un sistema muy usado en ambientes de producción para trackear los cambios sin tener que replicar todo nuevamente (creación de tablas, llaves foráneas, etc). Es decir, permite saber en qué punto estaba para saber qué es lo que se tiene que modificar.

sequelize.sync() empieza a leer los modelos, crea tablas y hace relist (se sobrescribe información), no se aconseja que se corra en producción. Es mejor sincronizar con un sistema de migraciones.

Para correr migraciones se utiliza la librería sequelize-cli y se instala como dependencia de desarrollo con el comando npm i sequelize-cli -D.

Posteriormente, se crea un archivo de configuración .sequelizerc en la carpeta principal.

.sequelizerc:

module.exports = {
  'config': './db/config.js',
  'models-paths: './db/models',
  'migrations-paths: './db/migrations',
  'seeders-path': './db/seeders',
}
  • config → Dónde se encuentra la configuración, esta configuración se encuentra la conexión hacia la BD. El cli tiene su propia conexión, independientemente de la conexión de la aplicación porque esas conexiones corren a nivel de terminal.

  • models-paths → Dónde se encuentran los modelos.

  • migrations-paths → Dónde se encuentran las migraciones.

  • seeders-path → Dónde se encuentran las semillas de información, sirve mucho para pruebas unitarias, end to end, donde se necesitan semillas de información que es como cargar varios datos de información a la BD.


Se crean las carpetas migrations, models, seeders y el archivo config.js dentro de la carpeta db.

🔧 Configuraciones

ℹ️ Repositorio: Link
Podemos definir una abstracción OOP, abstrayendo la clase Sequelize podemos recolectar desde variables de entorno de la siguiente forma:
.

.env Definición de variables de entorno.

# postgres and docker
PGDATABASE=
PGHOST=
PGPORT=
PGUSER=
PGPASSWORD=

config.js. Archivo de configuración de entorno.

 require('dotenv').config({ path: './src/config/.env' });
// code ...
/**
 * @description variables of database server
 */
export const database = {
    dbName: process.env.PGDATABASE,
    dbHost: process.env.PGHOST || 'localhost',
    dbPort: process.env.PGPORT || '5432',
    dbUser: process.env.PGUSER,
    dbPassword: process.env.PGPASSWORD,
};

Sequelize.js. Definición de librería driver.

import { Sequelize as SequelizeClient } from 'sequelize';
import { database } from '../config/config';

const USER = encodeURIComponent(database.dbUser);
const PASSWORD = encodeURIComponent(database.dbPassword);
const URI = `postgres://${USER}:${PASSWORD}@${database.dbHost}:${database.dbPort}/${database.dbName}`;

export default class Sequelize {
 /**
     * @description migration builder object
     */
    static migration() {
        return {
            development: {
                username: database.dbUser,
                password: database.dbPassword,
                database: database.dbName,
                host: database.dbHost,
                dialect: 'postgres',
            },
        };
    }
}

config.js. Archivo de configuración de entornos.

import Sequelize from './../libs/sequelize';

module.exports = Sequelize.migration;

.sequelizerc. Archivos de configuración sequelize.

require('@babel/register');

module.exports = {
    config: './src/mocks/config.js',
    'migrations-path': './src/mocks/migrations',
};

Sync se pronuncia como si lo estuvieras leyendo en español, “sinc”.
Therefore no es sin embargo, es POR LO TANTO, cambia un poco el sentido de la definición que da el profe, solo para aclarar

Por lo que entendí

Las migraciones son como un git para bases de datos relacionales, para no tener que reemplazar toda la base de datos sino solo agregar los cambios correspondientes.

Pase por aquí que está explicado a detalle lo de las migraciones en sequelize.

.sequelizerc

module.exports = {
  'config': './db/config.js',
  'models-path': './db/models/',
  'migrations-path': './db/migrations/',
  'seeders-path': './db/seeders/',
}

Los últimos minutos del video no se escucha nada