Вам нужно будет создать 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"
}
Самый полезный комментарий
Если кто-то придет сюда в поисках решения, вот что я делаю (и это работает как шарм!)