Anda harus membuat knexfile
, panggil dotenv di bagian atas (https://github.com/motdotla/dotenv#usage) dan kemudian atur konfigurasi Anda berdasarkan process.env
.
Saya kira saya harus melakukan sesuatu seperti ini untuk mengisi kunci kanan hash ekspor?
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'
}
};
Benar
Itu tidak berhasil, migrasi masih mencari lingkungan default (pengembangan) apa pun yang saya tetapkan.
Lihat #527
Belum ada rilis sejak saya bergabung tetapi idealnya itulah yang Anda inginkan. Lingkungan adalah fitur yang aneh dan solusi yang lebih baik adalah dengan menggunakan alat hierarki konfigurasi (dotenv menjadi yang sederhana). Untuk saat ini cukup atur semua lingkungan ke objek yang sama.
exports.development = exports.production = exports.otherEnv = configObject;
Jika ada yang datang ke sini mencari solusi, inilah yang saya lakukan (dan ini berfungsi seperti pesona!)
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 Terima kasih telah memperbaiki masalahnya. Masalah bagi saya secara khusus adalah bahwa saya memiliki knexfile.js saya adalah subdirektori dari proyek saya, bukan di direktori root. Jadi karena itu tidak dapat menemukan .env
tanpa melewati jalur ke sana. Terima kasih lagi!
Saya memiliki masalah ketika saya ingin menjalankan knex migrate:currentVersion
tidak memuat dari file .env. apa yang bisa saya lakukan untuk mengatasinya?
Saya memiliki masalah yang sama ketika saya mencoba menjalankan migrasi sebagai skrip npm. Ini berhasil ketika saya mengubah skrip menjadi node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Hai, semuanya Mungkin untuk menjalankan knex dalam mode senyap, jadi tanpa bertanya kepada saya melalui Prompt the environment , saya menggunakan mesin yang berbeda melalui ssh
@kcheang Saya mengalami kesulitan untuk menggunakan pendekatan itu dengan perintah umum, terutama ketika saya perlu menambahkan parameter dotenv_config_path.
Dengan Babel (ES6) Anda dapat melakukan:
```javascript
impor dotenv dari 'dotenv';
dotenv.config();
ekspor default memerlukan('knex')({
debug: benar,
klien: 'mysql',
koneksi: {
tuan rumah: process.env.DB_HOST,
pengguna: process.env.DB_USER,
kata sandi: process.env.DB_PW,
basis data: proses.env.DB,
rangkaian karakter: 'utf8',
}
});
@gerbus Bukankah itu akan menjadi masalah saat menggunakan migrasi dan seed?
Saya memiliki masalah yang sama ketika saya mencoba menjalankan migrasi sebagai skrip npm. Ini berhasil ketika saya mengubah skrip menjadi
node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Anda benar-benar jenius
Anda mungkin menemukan ini berguna:
env $(cat .env) knex migrate:latest
Dan jika Anda belum menginstal knex secara global, maka:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest
@RaimoJohanson Cara yang lebih tepat untuk melakukannya adalah
env $(cat .env) ./node_modules/.bin/knex migrate:latest
atau jika Anda menggunakan Skrip NPM:
env $(cat .env) knex migrate:latest
(direktori .bin diselesaikan secara otomatis saat menggunakan skrip npm)
@Jakobud Saya membaca tentang direktori .bin yang digunakan oleh Node secara internal dalam skrip npm - terima kasih untuk itu!
@Jakobud ini tidak akan berfungsi di Windows
Dengan beberapa file .env
ini mungkin solusi untuk menggunakan variabel lingkungan DOTENV_CONFIG_PATH
. Di package.json
saya, saya membuat skrip knex
yang mengambil .env
, dan test:knex
yang berfungsi dengan .env.test
:
"scripts": {
"knex": "babel-node -r dotenv/config node_modules/.bin/knex",
"test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
Komentar yang paling membantu
Jika ada yang datang ke sini mencari solusi, inilah yang saya lakukan (dan ini berfungsi seperti pesona!)