[DÚVIDA][Semana 5] Não consigo fazer o migration com o sequelize

Estou usado o ElephantSQL e o PostBird, não o Docker.

Quando rodo npx sequelize db:migrate aparece o seguinte erro:

Sequelize CLI [Node: 16.15.0, CLI: 6.4.1, ORM: 6.20.1]

ERROR: Cannot find "C:\Users\crica\OneDrive\Documents\Hiring Coders\sistema-agendamento\src\database\migrations\config\config.json". Have you run "sequelize init"?

Eu tentei rodar npx sequelize init e criou um monte de pastas. Aí quando rodei o comando anterior de novo ele pediu pra instalar mysql. Como estava muito diferente da aula, achei melhor desfazer (apagar as pastas criadas) e pedir ajuda aqui. Vi em outro tópico que mais gente teve esse problema, mas não entendi como fizeram pra resolver.

Meu Postbird conecatado tá assim:

Mas não consigo criar a tabela users como o professor faz na aula.

4 Likes

você consegue publicar o projeto no seu github para eu dar uma olhada?

Não consigo. Ele dá erro e diz que não foi possível fazer o commit. Sei lá porque. Mas aqui estão meus códigos e um print das pastas.

package.json
{
  "name": "sistema-agendamento",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon src/server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.1",
    "pg": "^8.7.3",
    "pg-hstore": "^2.3.4",
    "sequelize": "^6.20.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.16",
    "sequelize-cli": "^6.4.1",
    "sucrase": "^3.21.0"
  }
}
nodemon.json
{
  "execMap": {
    "js": "sucrase-node"
  }
}
.sequelizerc
const { resolve } = require('path');

module.exports = {
  config: resolve(__dirname, 'src', 'config', 'database.js'),
  'models-path': resolve(__dirname, 'src', 'app', 'models'),
  'migrations-path': resolve(__dirname, 'src', 'database', 'migrations'),
  'seeders-path': resolve(__dirname, 'src', 'database', 'seeds')
}
server.js
import app from './app';

app.listen(3333);
router.js
import { Router } from 'express';

const routes = new Router();

routes.get('/', (req, res) => {
  return res.json({message: 'Okay'});
})

export default routes;
app.js
import express from 'express';
import routes from './router';

class App {
  constructor() {
    this.server = express();
    this.middlewares();
    this.routes();
  }

  middlewares() {
    this.server.use(express.json());
  }

  routes() {
    this.server.use(routes);
  }
}

export default new App().server;
20220606141056-create-users.js
'use strict';

module.exports = {
  async up (queryInterface, Sequelize) {
    return queryInterface.createTable('users', {
      id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
      },
      name: {
        type: Sequilize.STRING,
        allowNull: false,
      },
      email: {
        type: Sequilize.STRING,
        allowNull: false,
      },
      password_hash: {
        type: Sequilize.STRING,
        allowNull: false,
      },
      provider: {
        type: Sequilize.BOOLEAN,
        defaultValue: false,
        allowNull: false,
      },
      created_at: {
        type: Sequilize.DATE,
        allowNull: false,
      },
      updated_at: {
        type: Sequilize.DATE,
        allowNull: false,
      }
    })
  },

  async down (queryInterface) {
    return queryInterface.dropTable('users')
  }
};
database.js
module.exports = {
  dialect: 'postgres',
  url: 'postgres://iftpauin:5VKRn0BtlfETo01m3dIx3c4lOaPCKLPm@chunee.db.elephantsql.com/iftpauin',
  define: {
    timestamp: true,
    underscored: true,
    underscoredAll: true,
  }
}

Pastas

1 Like

no app.js, adiciona a pasta “database” nas importações…

import './database';

Essa é a única coisas que está diferente do meu código… mas eu precisaria ver as configurações do banco de dados para poder avaliar melhor (além disso, eu estou usando o docker com o postbird, então possivelmente a configuração é um pouco diferente da sua)


Em relação ao Postbird… porque o nome do database da sua foto consta como “iftpauin”? Seguindo as instruções das aulas, era para você estar se conectando no database “sistema”, para dai criar uma tabela “users” através do sequelize

3 Likes

Tbm estou agarrada nessa parte e não consigo criar a tabela users com o comando migrate igual o professor faz, antes tava dando esse erro igual o seu e fui tentando arrumar igual as dicas nos outros tópicos aqui e agora está aparecendo o erro:

Argumentos desconhecidos: models-paths, modelsPaths

2 Likes

Oi @cristiane.dsc, o sequelize init é um comando para iniciar um projeto. Ele cria a estrutura padrão. Entendo que, como estamos fazendo diretamente, inclusive usando o .sequelizerc ele não vai te ajudar nessa fase. Se estiver usando git , minha sugestão seria reverter para o último commit onde o APP estava funcionando.

Seu arquivo config.json de fato existe no caminho indicado?

2 Likes

Em relação ao Postbird… porque o nome do database da sua foto consta como “iftpauin”?

Aqui o porquê:
5d95f4bc8a065c4612fba4bb24bd1e72

Vou ver se condigo alterar as configurações que você falou, aí volto aqui pra dizer se funcionou.

2 Likes

Oi @cristiane.dsc, tentei mudar o nome do meu executando o comando abaixo, mas ele não deixou. Imagino que não posso pelo plano free:

ALTER DATABASE xojbqdqw RENAME TO bookingSystem;
ERROR: permission denied to rename database

Documentação ElephantSQL
can not manage users or databases, what is wrong?
It is only possible to manage databases and users on dedicated plans.

2 Likes

Duda o argumento correto é : models-path. Tenta fazer a correção no .sequelizerc e ver se o problema continua

3 Likes

Oi @DudaFajardo, veja a syntax correta no alerta 2 desse post.

2 Likes

Obrigada @Davidson.Xavier!! Eu arrumei esse e deu outro erro depois e descobri q tinha uma palavra digitada errada também no arquivo que foi gerado no migrations, aí depois que eu arrumei essas duas eu consegui!! Muito obrigada!!

2 Likes

Oii @AlbertoVictorRebello, obrigada! Eu to de olho nesse post também está ajudando bastante!! Obrigada! No meu caso tinha esse erro de syntax no .sequelizerc e outro erro também de syntax no arquivo create-users.js. Uma letrinha errada e perdemos um tempão… :smiling_face: Depois disso funcionou aqui. Obrigada!!

2 Likes

Seu arquivo config.json de fato existe no caminho indicado?

Não. Eu não tenho nenhum arquivo config.json porque o professor não criou esse arquivo. Tem uma pasta chamada config dentro da pasta src. Imagino que as configurações vão ficar lá depois de criadas.

Adicionei import './database'; no app.js e o mesmo erro continua.

Eu estou perdida com isso. Segui as aulas exatamente, mas não estou usando o Docker. Então eu segui o passo a passo da aula 4, que mostra como configurar ElephantSQL e Postbird.

O professor criou uma instância chamada ‘sistemadeagendamento’ (a que eu criei é “sistema-agendamento”). Dentro dessa instância na parte “User & Default database” o dele chama “amvspwjf” e o meu chama 'iftpauin". Daí ele copia o link da URL e cola na área de conexão do Postbird e diz que é isso. Foi exatamente o que eu fiz…

Depois na aula seguinte ele configura tudo pra usar o Docker, então eu segui as orientações desse post aqui pra conectar com o ElephantSQL.

Eu procurei tbm no ElephantSQL se tinha como mudar o nome lá e não achei como faz. Ta explicado então.

Descobri o problema. Não tinha percebido que eu tava na pasta errada :woman_facepalming:t2:… E também tinha escrito “Sequilize” (com i) ao invés de “Sequelize” (com e) no arquivo create-users.js

Naveguei até a pasta certa (a pasta raiz do projeto), arrumei o erro de digitação e deu certo. A tabela ‘users’ foi criada normalmente.

3 Likes

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.