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"
}
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!)