Knex: Usando knex con dotenv

Creado en 4 dic. 2014  ·  19Comentarios  ·  Fuente: knex/knex

Hola,
¿Existe una forma sencilla de usar Knex y la CLI de migración / semilla con dotenv ?

Comentario más útil

En caso de que alguien venga aquí buscando una solución, esto es lo que hago (¡y funciona a la perfección!)

require('dotenv').config({path: 'path_to_env_file'});

module.exports = {
  client: 'pg',
  connection: {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME
  }
};

Todos 19 comentarios

Debería crear un knexfile , llamar a dotenv en la parte superior (https://github.com/motdotla/dotenv#usage) y luego configurar su configuración basada en process.env .

Supongo que tendría que hacer algo como esto para completar la clave correcta del hash de exportaciones.

var dotenv = require('dotenv');
dotenv.load();

module.exports[process.env.NODE_ENV] = {
    client: 'mariasql',
    connection: {
        host: process.env.DB_HOST,
        user: process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD,
        db: process.env.DB_NAME,
        charset: 'utf8'
    },
    pool: {
        min: 2,
        max: 10
    },
    migrations: {
        tableName: 'knex_migrations'
    }
};

Correcto

Eso no funcionó, las migraciones aún buscan el entorno predeterminado (desarrollo) sin importar lo que establezca.

Ver # 527

No ha habido un lanzamiento desde que me fusioné, pero eso es idealmente lo que quieres. Los entornos son una característica extraña y la mejor solución es usar una herramienta de jerarquía de configuración (dotenv es simple). Por ahora, configure todos los entornos en el mismo objeto.

exports.development = exports.production = exports.otherEnv = configObject;

En caso de que alguien venga aquí buscando una solución, esto es lo que hago (¡y funciona a la perfección!)

require('dotenv').config({path: 'path_to_env_file'});

module.exports = {
  client: 'pg',
  connection: {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME
  }
};

@mbavio Gracias que solucionó el problema. El problema para mí específicamente fue que tengo mi knexfile.js es un subdirectorio de mi proyecto, no en el directorio raíz. Por lo tanto, no pudo encontrar mi .env sin pasarle la ruta. ¡Gracias de nuevo!

Tengo el problema cuando quiero ejecutar knex migrate:currentVersion , no se carga desde el archivo .env. ¿Qué puedo hacer para resolver eso?

Tuve el mismo problema cuando intenté ejecutar migraciones como scripts npm. Funcionó cuando cambié el script a node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest .

Hola a todos. Es posible ejecutar knex en modo silencioso, así que sin preguntarme a través del aviso del entorno, lo estoy implementando en una máquina diferente a través de ssh.

@kcheang Tengo problemas para usar ese enfoque con un comando genérico, especialmente cuando necesito agregar un parámetro dotenv_config_path.

Con Babel (ES6) puedes hacer:

`` `javascript
importar dotenv desde 'dotenv';
dotenv.config ();

exportar por defecto require ('knex') ({
debug: cierto,
cliente: 'mysql',
conexión: {
host: process.env.DB_HOST,
usuario: process.env.DB_USER,
contraseña: process.env.DB_PW,
base de datos: process.env.DB,
juego de caracteres: 'utf8',
}
});

@gerbus ¿No será eso un problema al usar migraciones y semillas?

Tuve el mismo problema cuando intenté ejecutar migraciones como scripts npm. Funcionó cuando cambié el script a node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest .

Eres un puto genio

Puede encontrar esto útil:
env $(cat .env) knex migrate:latest

Y si no tiene knex instalado globalmente, entonces:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest

@RaimoJohanson Una forma más adecuada de hacerlo sería

env $(cat .env) ./node_modules/.bin/knex migrate:latest

o si está utilizando un script NPM:

env $(cat .env) knex migrate:latest (el directorio .bin se resuelve automáticamente cuando se utilizan scripts npm)

@Jakobud Leí sobre el directorio .bin que utiliza Node internamente en scripts npm, ¡gracias por eso!

@Jakobud esto no funcionaría en Windows

Con varios archivos .env , podría ser una solución utilizar la variable de entorno DOTENV_CONFIG_PATH . En mi package.json creé un script knex que recoge .env , y un test:knex que funciona con .env.test :

"scripts": {
  "knex": "babel-node -r dotenv/config node_modules/.bin/knex",
  "test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

npow picture npow  ·  3Comentarios

ghost picture ghost  ·  3Comentarios

aj0strow picture aj0strow  ·  3Comentarios

legomind picture legomind  ·  3Comentarios

zettam picture zettam  ·  3Comentarios