Knex: Использование knex с dotenv

Созданный на 4 дек. 2014  ·  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 Спасибо, что .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) вы можете:

`` javascript
импортировать dotenv из dotenv;
dotenv.config ();

экспорт по умолчанию require ('knex') ({
отладка: правда,
клиент: 'mysql',
связь: {
хост: process.env.DB_HOST,
пользователь: process.env.DB_USER,
пароль: process.env.DB_PW,
база данных: process.env.DB,
кодировка: '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 рейтинги