Hi,
Gibt es eine einfache Möglichkeit, Knex und die Migration/Seed-CLI mit dotenv zu verwenden ?
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"
}
Hilfreichster Kommentar
Falls jemand auf der Suche nach einer Lösung hierher kommt, mache ich Folgendes (und es funktioniert wie ein Zauber!)