Knex: استخدام knex مع dotenv

تم إنشاؤها على ٤ ديسمبر ٢٠١٤  ·  19تعليقات  ·  مصدر: knex/knex

أهلا،
هل هناك طريقة بسيطة لاستخدام Knex و CLI الهجرة / البذور مع dotenv ؟

التعليق الأكثر فائدة

في حال أتى أي شخص إلى هنا بحثًا عن حل ، فإليك ما أفعله (وهو يعمل مثل السحر!)

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

ال 19 كومينتر

ستحتاج إلى إنشاء knexfile ، استدعاء dotenv في الجزء العلوي (https://github.com/motdotla/dotenv#usage) ثم إعداد التكوين الخاص بك على أساس process.env .

أعتقد أنني سأفعل شيئًا كهذا لملء المفتاح الصحيح لتجزئة الصادرات؟

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

صيح

لم ينجح ذلك ، لا تزال عمليات الترحيل تبحث عن البيئة الافتراضية (التطوير) بغض النظر عن ما قمت بتعيينه.

انظر # 527

لم يكن هناك إصدار منذ أن اندمجت ولكن هذا ما تريده بشكل مثالي. البيئات هي ميزة غريبة والحل الأفضل هو استخدام أداة التسلسل الهرمي للتكوين (dotenv بسيط). في الوقت الحالي ، ما عليك سوى تعيين جميع البيئات على نفس الكائن.

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

في حال أتى أي شخص إلى هنا بحثًا عن حل ، فإليك ما أفعله (وهو يعمل مثل السحر!)

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 شكرا الذي أصلح المشكلة. كانت المشكلة بالنسبة لي على وجه التحديد هي أن knexfile.js الخاص بي هو دليل فرعي لمشروعي ، وليس في الدليل الجذر. لذلك لم يتمكن من العثور على .env بدون تمرير المسار إليه. شكرا لك مرة أخرى!

لدي مشكلة عندما أريد تشغيل knex migrate:currentVersion لا يتم التحميل من ملف env. ماذا يمكنني أن أفعل لحل ذلك؟

واجهت نفس المشكلة عندما حاولت تشغيل عمليات الترحيل كنصوص برمجية npm. لقد نجحت عندما قمت بتغيير النص إلى node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest .

مرحبًا ، الجميع من الممكن تشغيل knex في الوضع الصامت ، لذلك دون أن تسألني عبر موجه البيئة ، فأنا أنشر في جهاز مختلف عبر ssh

kcheang لدي مشكلة في استخدام هذا الأسلوب مع أمر عام ، خاصةً عندما أحتاج إلى إضافة معامل dotenv_config_path.

مع Babel (ES6) يمكنك القيام بما يلي:

`` جافا سكريبت
استيراد dotenv من "dotenv" ؛
dotenv.config () ،

تصدير الافتراضي يتطلب ('knex') ({
التصحيح: صحيح ،
العميل: "mysql" ،
الإتصال: {
المضيف: process.env.DB_HOST ،
المستخدم: process.env.DB_USER ،
كلمة المرور: process.env.DB_PW ،
قاعدة البيانات: process.env.DB ،
charset: "utf8" ،
}
}) ؛

gerbus ألن تكون هذه مشكلة عند استخدام الهجرات والبذور؟

واجهت نفس المشكلة عندما حاولت تشغيل عمليات الترحيل كنصوص برمجية npm. لقد نجحت عندما قمت بتغيير النص إلى node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest .

أنت عبقري

قد تجد هذا مفيدا:
env $(cat .env) knex migrate:latest

وإذا لم يكن لديك knex مثبتًا عالميًا ، فقم بما يلي:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest

RaimoJohanson الطريقة الأكثر ملاءمة للقيام بذلك ستكون

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

أو إذا كنت تستخدم برنامج نصي NPM:

env $(cat .env) knex migrate:latest (يتم حل دليل .bin تلقائيًا عند استخدام البرامج النصية npm)

Jakobud لقد قرأت عن دليل .bin الذي تستخدمه Node داخليًا في البرامج النصية npm - شكرًا على ذلك!

Jakobud هذا لن يعمل على Windows

مع وجود ملفات .env ، قد يكون حل استخدام متغير البيئة DOTENV_CONFIG_PATH . في package.json أنشأت برنامجًا نصيًا knex يلتقط .env ، و test:knex الذي يعمل مع .env.test :

"scripts": {
  "knex": "babel-node -r dotenv/config node_modules/.bin/knex",
  "test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات