Knex: Knex mit dotenv . verwenden

Erstellt am 4. Dez. 2014  ·  19Kommentare  ·  Quelle: knex/knex

Hi,
Gibt es eine einfache Möglichkeit, Knex und die Migration/Seed-CLI mit dotenv zu verwenden ?

Hilfreichster Kommentar

Falls jemand auf der Suche nach einer Lösung hierher kommt, mache ich Folgendes (und es funktioniert wie ein Zauber!)

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

Alle 19 Kommentare

Sie müssten ein knexfile erstellen, oben dotenv aufrufen (https://github.com/motdotla/dotenv#usage) und dann Ihre Konfiguration basierend auf process.env einrichten.

Ich denke, ich müsste so etwas tun, um den richtigen Schlüssel des Export-Hashs zu füllen?

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

Richtig

Das hat nicht funktioniert, Migrationen suchen immer noch nach der Standardumgebung (Entwicklung), egal was ich eingestellt habe.

Siehe #527

Es gab seit meiner Fusion keine Veröffentlichung, aber das ist idealerweise das, was Sie wollen. Umgebungen sind eine seltsame Funktion und die bessere Lösung ist die Verwendung eines Konfigurationshierarchie-Tools (dotenv ist ein einfaches). Stellen Sie vorerst einfach alle Umgebungen auf dasselbe Objekt ein.

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

Falls jemand auf der Suche nach einer Lösung hierher kommt, mache ich Folgendes (und es funktioniert wie ein Zauber!)

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 Danke, dass das Problem behoben wurde. Das Problem für mich war speziell, dass ich meine knexfile.js habe, die ein Unterverzeichnis meines Projekts ist, nicht im Stammverzeichnis. Daher konnte es mein .env nicht finden, ohne den Pfad zu ihm zu übergeben. Danke noch einmal!

Ich habe das Problem, wenn ich knex migrate:currentVersion ausführen möchte, es wird nicht aus der .env-Datei geladen. was kann ich tun um das zu beheben?

Ich hatte das gleiche Problem, als ich versuchte, Migrationen als npm-Skripte auszuführen. Es hat funktioniert, als ich das Skript in node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest geändert habe.

Hi, allerseits Es ist möglich, Knex im Silent-Modus auszuführen

@kcheang Ich habe Probleme, diesen Ansatz mit einem generischen Befehl zu verwenden, insbesondere wenn ich einen dotenv_config_path-Parameter hinzufügen muss.

Mit Babel (ES6) können Sie:

```javascript
importiere dotenv aus 'dotenv';
dotenv.config();

export default require('knex')({
debuggen: wahr,
Client: 'mysql',
Verbindung: {
host: process.env.DB_HOST,
Benutzer: process.env.DB_USER,
Passwort: process.env.DB_PW,
Datenbank: process.env.DB,
Zeichensatz: 'utf8',
}
});

@gerbus Wird das bei der Verwendung von Migrationen und Seeds kein Problem sein?

Ich hatte das gleiche Problem, als ich versuchte, Migrationen als npm-Skripte auszuführen. Es hat funktioniert, als ich das Skript in node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest geändert habe.

Du bist ein verdammtes Genie

Dies kann hilfreich sein:
env $(cat .env) knex migrate:latest

Und wenn Sie Knex nicht global installiert haben, dann:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest

@RaimoJohanson Ein richtigerer Weg, dies zu tun, wäre

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

oder wenn Sie ein NPM-Skript verwenden:

env $(cat .env) knex migrate:latest (das .bin-Verzeichnis wird bei Verwendung von npm-Skripten automatisch aufgelöst)

@Jakobud Ich habe über das .bin-Verzeichnis gelesen, das von Node intern in npm-Skripten verwendet wird - danke dafür!

@Jakobud das würde unter Windows nicht funktionieren

Bei mehreren .env Dateien kann es eine Lösung sein, die Umgebungsvariable DOTENV_CONFIG_PATH . In meinem package.json ich ein knex Skript erstellt, das .env aufnimmt, und ein test:knex , das mit .env.test :

"scripts": {
  "knex": "babel-node -r dotenv/config node_modules/.bin/knex",
  "test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen