Vous devrez créer un knexfile
, appeler dotenv en haut (https://github.com/motdotla/dotenv#usage), puis configurer votre configuration en fonction de process.env
.
Je suppose que je devrais faire quelque chose comme ça pour remplir la bonne clé du hachage d'exportation?
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'
}
};
Correct
Cela n'a pas fonctionné, les migrations recherchent toujours l'environnement par défaut (développement), peu importe ce que j'ai défini.
Voir #527
Il n'y a pas eu de sortie depuis que j'ai fusionné mais c'est idéalement ce que vous voulez. Les environnements sont une fonctionnalité étrange et la meilleure solution consiste à utiliser un outil de hiérarchie de configuration (dotenv étant un outil simple). Pour l'instant, définissez simplement tous les environnements sur le même objet.
exports.development = exports.production = exports.otherEnv = configObject;
Au cas où quelqu'un viendrait ici à la recherche d'une solution, voici ce que je fais (et cela fonctionne à merveille !)
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 Merci d'avoir résolu le problème. Le problème pour moi en particulier était que mon knexfile.js est un sous-répertoire de mon projet, pas dans le répertoire racine. Donc, il n'a pas pu trouver mon .env
sans lui passer le chemin. Merci encore!
J'ai le problème lorsque je veux exécuter knex migrate:currentVersion
il ne se charge pas à partir du fichier .env. que puis-je faire pour résoudre cela?
J'ai eu le même problème lorsque j'ai essayé d'exécuter des migrations en tant que scripts npm. Cela a fonctionné lorsque j'ai changé le script en node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Salut tout le monde Il est possible d'exécuter knex en mode silencieux, donc sans me demander via prompt l'environnement, je déploie sur une autre machine via ssh
@kcheang J'ai du mal à utiliser cette approche avec une commande générique, surtout lorsque je dois ajouter un paramètre dotenv_config_path.
Avec Babel (ES6) vous pouvez faire :
```javascript
importer dotenv de 'dotenv';
dotenv.config();
exporter par défaut require('knex')({
débogage : vrai,
client : 'mysql',
lien: {
hôte : process.env.DB_HOST,
utilisateur : process.env.DB_USER,
mot de passe : process.env.DB_PW,
base de données : process.env.DB,
jeu de caractères : 'utf8',
}
});
@gerbus Cela ne sera-t-il pas un problème lors de l'utilisation des migrations et des graines ?
J'ai eu le même problème lorsque j'ai essayé d'exécuter des migrations en tant que scripts npm. Cela a fonctionné lorsque j'ai changé le script en
node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Tu es un putain de génie
Cela peut vous être utile :
env $(cat .env) knex migrate:latest
Et si vous n'avez pas installé knex globalement, alors :
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest
@RaimoJohanson Une façon plus appropriée de le faire serait
env $(cat .env) ./node_modules/.bin/knex migrate:latest
ou si vous utilisez un script NPM :
env $(cat .env) knex migrate:latest
(le répertoire .bin est automatiquement résolu lors de l'utilisation de scripts npm)
@Jakobud J'ai lu sur le répertoire .bin utilisé par Node en interne dans les scripts npm - merci pour ça !
@Jakobud cela ne fonctionnerait pas sous Windows
Avec plusieurs fichiers .env
, il peut être judicieux d'utiliser la variable d'environnement DOTENV_CONFIG_PATH
. Dans mon package.json
j'ai créé un script knex
qui récupère .env
, et un test:knex
qui fonctionne avec .env.test
:
"scripts": {
"knex": "babel-node -r dotenv/config node_modules/.bin/knex",
"test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
Commentaire le plus utile
Au cas où quelqu'un viendrait ici à la recherche d'une solution, voici ce que je fais (et cela fonctionne à merveille !)