Search code examples
node.jspostgresqlexpressknex.js

Why yarn knex is not migrating in local repo


When I am running yarn knex migrate:make init, I am getting this error

Failed to resolve config file, knex cannot determine where to generate migrations
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
    at validateString (internal/validators.js:120:11)
    at Object.resolve (path.js:139:9)
    at D:\NEXT-JS\pen-neuton\server\node_modules\knex\lib\migrations\migrate\MigrationGenerator.js:77:19
    at Array.map (<anonymous>)
    at MigrationGenerator._absoluteConfigDirs (D:\NEXT-JS\pen-neuton\server\node_modules\knex\lib\migrations\migrate\MigrationGenerator.js:71:24)
    at MigrationGenerator._ensureFolder (D:\NEXT-JS\pen-neuton\server\node_modules\knex\lib\migrations\migrate\MigrationGenerator.js:28:23)   
    at MigrationGenerator.make (D:\NEXT-JS\pen-neuton\server\node_modules\knex\lib\migrations\migrate\MigrationGenerator.js:20:16)
    at Migrator.make (D:\NEXT-JS\pen-neuton\server\node_modules\knex\lib\migrations\migrate\Migrator.js:320:27)
    at Command.<anonymous> (D:\NEXT-JS\pen-neuton\server\node_modules\knex\bin\cli.js:218:10)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
error Command failed with exit code 1.

knexfile.js

require("dotenv").config();

module.exports = {
  development: {
    client: "pg",
    useNullAsDefault: true,
    debug: process.env.NODE_ENV === 'development',
    connection: {
      host: process.env.POSTGRES_DEV_HOST,
      port: process.env.POSTGRES_DEV_PORT,
      user: process.env.POSTGRES_DEV_USER,
      password: process.env.POSTGRES_DEV_PASSWORD,
      database: process.env.POSTGRES_DEV_DATABASE
    },
    migrations: {
      directory: "./migrations"
    },
    seeds: {
      directory: "./seeds"
    }
  }
};

database/index.js

const knexfile = require('./knexfile')
const debug = require('debug')
const knex = require('knex')
const util = require('util')

const log = debug('app:db')

const env = process.env.NODE_ENV
const config = knexfile[env]

log(`Connected to ${config.client} with parameters: ${util.inspect(config.connection, { colors: true })}`)

module.exports = knex(config)

Someone suggested me to install Knex globally, run knex migrate:make init and It worked. but I wonder is it good for production?


Solution

  • Thanks to Mic Fung I got this solution,

    yarn knex migrate:make init  --knexfile=./config/knexfile.js
    

    If you guys have a different solution then please share.