Knex: Utiliser knex avec dotenv

Créé le 4 déc. 2014  ·  19Commentaires  ·  Source: knex/knex

Salut,
existe-t-il un moyen simple d'utiliser Knex et la CLI migration/seed avec dotenv ?

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

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
  }
};

Tous les 19 commentaires

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"
}
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

lanceschi picture lanceschi  ·  3Commentaires

koskimas picture koskimas  ·  3Commentaires

saurabhghewari picture saurabhghewari  ·  3Commentaires

marianomerlo picture marianomerlo  ·  3Commentaires

mattgrande picture mattgrande  ·  3Commentaires