Knex: Menggunakan knex dengan dotenv

Dibuat pada 4 Des 2014  ·  19Komentar  ·  Sumber: knex/knex

Hai,
apakah ada cara sederhana untuk menggunakan Knex dan migrasi/seed CLI dengan dotenv ?

Komentar yang paling membantu

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

Semua 19 komentar

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"
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mishitpatel picture mishitpatel  ·  3Komentar

nklhrstv picture nklhrstv  ·  3Komentar

npow picture npow  ·  3Komentar

mattgrande picture mattgrande  ·  3Komentar

tjwebb picture tjwebb  ·  3Komentar