Search code examples
node.jssequelize.jssequelize-cli

Sequelize does not take host name from .env file and default to ip address of the machine


My sequelize config.js looks like as given below.

const dotenv = require('dotenv');

dotenv.config();

module.exports = {
  development: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    dialect: 'mysql'
  },
  test: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    dialect: 'mysql'
  },
  production: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    dialect: 'mysql'
  }
}

I am defining .env file as below:

DB_USERNAME=mysqldev
DB_PASSWORD=password
DB_DATABASE=mydatabase
DB_HOST=hostname.on.aws.com

When I run the sequelize-cli db:migrate command on my local machine it works ( where I set DB_HOST to 127.0.0.1). But when I run on my dev server on AWS, I get the following error.

CREATE command denied to user 'mysqldev'@'<aws ip address>' for table 'SequelizeMeta'

If I keep host name directly in config file instead of using environment variable event then I get the same error.

 development: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: hostname.on.aws.com,  // <-- this does not work, I get the same error.
    dialect: 'mysql'
  },

So, it seems it always look for database in local server, while my database is on AWS. Note: Only the Sequelize migration command is not working. My app is able to connect to database on AWS.

What could be wrong in this configuration? Am I missing something?

I am using sequelize version 5.19 and sequelize-cli version 5.5.1.


Solution

  • Try to check the user (mysqldev) and its permissions by connecting to database (on AWS).

    It may be due to the permission issue. According to me it's able to connect to database but lacks permission.