A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Configurando y corriendo migraciones con npm scripts

14/27
Recursos

Aportes 15

Preguntas 10

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Si de casualidad tienen el siguiente error al ejecutar npm run migrations:run

ERROR: Dialect needs to be explicitly supplied as of v4.0.0

tienen que definir su variable de entorno NODE_ENV en su archivo .env

NODE_ENV='development'

Parece ser que si se viene de haber usado MySQL del v铆deo anterior, hay que hacer los cambios pertinentes para que todo quede de nuevo en PostgreSQL, de otro modo no har谩 la migraci贸n 鈥

En el minuto 4:48, el profesor explica como usar la opci贸n de down, pero hubo un peque帽o error, se debe usar .dropTable( ) en vez de .drop( ) 馃槄

Aqui todos los comandos de la cli de sequlize (:

Sequelize-cli Commands:

  • sequelize-cli db:migrate Run pending migrations
  • sequelize-cli db:migrate:schema:timestamps:add Update migration table to have timestamps
  • sequelize-cli db:migrate:status List the status of all migrations
  • sequelize-cli db:migrate:undo Reverts a migration
  • sequelize-cli db:migrate:undo:all Revert all migrations ran
  • sequelize-cli db:seed Run specified seeder
  • sequelize-cli db:seed:undo Deletes data from the database
  • sequelize-cli db:seed:all Run every seeder
  • sequelize-cli db:seed:undo:all Deletes data from the database
  • sequelize-cli db:create Create database specified by configuration
  • sequelize-cli db:drop Drop database specified by configuration
  • sequelize-cli init Initializes project
  • sequelize-cli init:config Initializes configuration
  • sequelize-cli init:migrations Initializes migrations
  • sequelize-cli init:models Initializes models
  • sequelize-cli init:seeders Initializes seeders
  • sequelize-cli migration:generate Generates a new migration file
  • [aliases: migration:create]
    sequelize-cli model:generate Generates a model and its migration
  • [aliases: model:create]
    sequelize-cli seed:generate Generates a new seed file

Segun veo el profe revirtio los cambios que habiamos hecho por cambiar de motor, recuerda poner las keys de mysql a postgres y el puerto en el archivo env

  DB_PORT='5432'

Recomendaciones

鉁 Recomiendo que tengan un archivo migration.template.js:

// schemas imports

module.exports = {
    up: async (queryInterface) => {
        // code
    },

    down: async (queryInterface) => {
        // code
    },
};

por si a alguno no le ha corrido y salido este mensaje aqui les expongo lo que me sucedi贸:

> [email protected]1.0.0 migrations:generate /home/emercado/backendDev/my-backend-pg
> sequelize-cli migration:generate --name "create-user"

/home/emercado/backendDev/my-backend-pg/.sequelizerc:3
  'models-path': './db/models'
  ^^^^^^^^^^^^^

SyntaxError: Unexpected string
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at loadRCFile (/home/emercado/backendDev/my-backend-pg/node_modules/sequelize-cli/lib/core/yargs.js:23:77)
    at Object.<anonymous> (/home/emercado/backendDev/my-backend-pg/node_modules/sequelize-cli/lib/core/yargs.js:26:63)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected]1.0.0 migrations:generate: `sequelize-cli migration:generate --name "create-user"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected]1.0.0 migrations:generate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/emercado/.npm/_logs/2021-11-25T08_35_03_626Z-debug.log
[email protected]:~/backendDev/my-backend-pg$ code /home/emercado/.npm/_logs/

en el archivo .sequelizerc me faltaban unas comas corregi y corrio normal:

> [email protected]1.0.0 migrations:generate /home/emercado/backendDev/my-backend-pg
> sequelize-cli migration:generate --name "create-user"


Sequelize CLI [Node: 14.18.0, CLI: 6.3.0, ORM: 6.12.0-alpha.1]

migrations folder at "/home/emercado/backendDev/my-backend-pg/db/migrations" already exists.
New migration was created at /home/emercado/backendDev/my-backend-pg/db/migrations/20211125084917-create-user.js .

**** el archivo mencionado:

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

Sequelize no crea las migraciones de forma autom谩tica como otros ORM en base a los cambios que se tengan en el modelo. Tenemos el motor para hacer migraciones y nosotros decimos el c贸mo debemos hacer las migraciones.

El script "migrations:generate": "sequelize-cli migration:generate --name" va a generar el boilerplate de una migraci贸n.

Por ejemplo, en la terminal se ejecuta npm run migrations:generate create-user para crear una migraci贸n para los usuarios.

Esto va a crear un archivo (boilerplate) que es una pieza de c贸digo lista para empezar a correr migraciones, pero manualmente se debe poner c贸mo hacer y qu茅 correr.

Ejemplo del boilerplate para migrar usuario 20220109030523-create-user.js:

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    /**
     * Add altering commands here.
     *
     * Example:
     * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
     */
  },

  down: async (queryInterface, Sequelize) => {
    /**
     * Add reverting commands here.
     *
     * Example:
     * await queryInterface.dropTable('users');
     */
  }
};

Se requiere el esquema y el nombre de la tabla.

Para revertir cambios se escribe c贸digo en down. Es decir, se revierte lo que se puso en up.

En caso de que se tengan varios modelos, se pueden integrar en el mismo archivo.

'use strict';

const { UserSchema, USER_TABLE } = require('../models/user.model');

module.exports = {
  up: async (queryInterface) => {
    await queryInterface.createTable(USER_TABLE, UserSchema);
  },

  down: async (queryInterface) => {
    await queryInterface.drop(USER_TABLE);
  },
};

Para correr las migraciones se a帽ade un script con el comando "migrations:run": "sequelize-cli db:migrate". De esa manera detecta todas las migraciones de la carpeta migrations y las empieza a correr.

Tambi茅n, se puede hacer un rollback a帽adiendo el script "migrations:revert": "sequelize-cli db:migrate:undo", y de esa manera revertimos a la 煤ltima migraci贸n.

Otro script (peligroso) que se puede a帽adir es "migrations:delete": "sequelize-cli db:migrate:undo:all", esto va a vaciar todas las migraciones, es decir, va a revertir todas las migraciones que se hayan corrido como para empezar de cero. Hay que tener cuidado en producci贸n ya que ese comando borrar铆a todo, incluyendo la informaci贸n.

Al ejecutar "migrations:run" se crean las tablas del modelo y adem谩s la tabla SequelizeMeta que guarda el hist贸rico de las migraciones que se han ejecutado.

ahora me sale este error

鈥渕igrations:generate鈥: 鈥渟equelize-cli migration:generate --name鈥

Compa帽eros, espero est茅n muy bien, me top茅 con el caso de que la configuraci贸n que tenemos en el archivo config.js no me funciona, ya que al ejecutar la migraci贸n me aparec铆a un error de este tipo:

sequelize-cli db:migrate

Sequelize CLI [Node: 14.17.5, CLI: 6.4.0, ORM: 6.13.0]

ERROR: Error reading "config\config.js". Error: Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'

Luego de un rato de consultar y probar, me funcion贸 cambiar el archivo config.js por config.json, en donde se especifica lo siguiente:

{
  "development": {
    "username": "admin",
    "password": "root",
    "database": "posstgres",
    "host": "localhost",
    "port": "5437",
    "dialect": "postgres"
  },
  "production": {
    "username": "admin",
    "password": "root",
    "database": "posstgres",
    "host": "localhost",
    "port": "5437",
    "dialect": "postgres"
  }
}

Resultado:

sequelize-cli db:migrate

Sequelize CLI [Node: 14.17.5, CLI: 6.4.0, ORM: 6.13.0]

Loaded configuration file "db\config.json".
Using environment "development".
== 20220115015915-create-user: migrating =======
== 20220115015915-create-user: migrated (0.222s)

Si alguien sabe el por qu茅 de esta situaci贸n, le agradezco explicarnos.

que elegante esta clase, lo mejor del curso

what a nasty class 馃枛

no s茅 pero este curso se me ha hecho algo inc贸modo, a cada rato es un error cosa que es bueno porque nos hace aprendder de ellos, pero por ejemplo aqui me qued茅 con un error que no se como resolver :

Me recuerda muchos como se hacen las migraciones en Ruby on Rails