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'
Introducción
Persistencia de datos en Node.js
Platzi Store: instalación y presentación del proyecto
Base de datos
Instalación de Docker
Configuración de Postgres en Docker
Explorando Postgres: interfaces gráficas vs. terminal
Integración de node-postgres
Manejando un Pool de conexiones
Variables de ambiente en Node.js
Sequelize
¿Qué es un ORM? Instalación y configuración de Sequelize ORM
Tu primer modelo en Sequelize
Crear, actualizar y eliminar
Cambiando la base de datos a MySQL
Migraciones
¿Qué son las migraciones? Migraciones en Sequelize ORM
Configurando y corriendo migraciones con npm scripts
Modificando una entidad
Relaciones
Relaciones uno a uno
Resolviendo las relaciones uno a uno
Relaciones uno a muchos
Resolviendo relaciones uno a muchos
Consultas
Órdenes de compra
Relaciones muchos a muchos
Resolviendo relaciones muchos a muchos
Paginación
Filtrando precios con operadores
Despliegue
Deploy en Heroku
Consideraciones al hacer migraciones
Próximos pasos
Toma con el Curso de Backend con Node.js: Autenticación con Passport.js y JWT
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 15
Preguntas 10
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:
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'
✨ 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
“migrations:generate”: “sequelize-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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.