Você precisaria criar um knexfile
, chamar dotenv na parte superior (https://github.com/motdotla/dotenv#usage) e definir sua configuração com base em process.env
.
Acho que teria que fazer algo assim para preencher a chave certa do hash de exportação.
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'
}
};
Correto
Isso não funcionou, as migrações ainda procuram o ambiente padrão (desenvolvimento), não importa o que eu configurei.
Veja # 527
Não houve um lançamento desde a fusão, mas é o que você deseja. Ambientes são um recurso estranho e a melhor solução é usar uma ferramenta de hierarquia de configuração (dotenv sendo simples). Por enquanto, apenas defina todos os ambientes para o mesmo objeto.
exports.development = exports.production = exports.otherEnv = configObject;
Caso alguém venha aqui em busca de uma solução, aqui está o que eu faço (e funciona perfeitamente!)
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 Obrigado que resolveu o problema. O problema para mim especificamente é que meu knexfile.js é um subdiretório do meu projeto, não no diretório raiz. Portanto, ele não conseguiu encontrar meu .env
sem passar o caminho para ele. Obrigado novamente!
Eu tenho um problema quando desejo executar knex migrate:currentVersion
ele não está carregando de um arquivo .env. o que posso fazer para resolver isso?
Tive o mesmo problema quando tentei executar migrações como scripts npm. Funcionou quando mudei o script para node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Olá a todos É possível executar o knex no modo silencioso, então sem me perguntar via prompt do ambiente, estou implantando em uma máquina diferente via ssh
@kcheang Tenho problemas para usar essa abordagem com um comando genérico, especialmente quando preciso adicionar um parâmetro dotenv_config_path.
Com o Babel (ES6) você pode fazer:
`` `javascript
importar dotenv de 'dotenv';
dotenv.config ();
Exigir padrão de exportação ('knex') ({
debug: true,
cliente: 'mysql',
conexão: {
host: process.env.DB_HOST,
usuário: process.env.DB_USER,
senha: process.env.DB_PW,
banco de dados: process.env.DB,
charset: 'utf8',
}
});
@gerbus Não será um problema ao usar migrações e sementes?
Tive o mesmo problema quando tentei executar migrações como scripts npm. Funcionou quando mudei o script para
node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest
.
Você é um gênio f * cking
Você talvez ache isso útil:
env $(cat .env) knex migrate:latest
E se você não tem o knex instalado globalmente, então:
env $(cat .env) ./node_modules/knex/bin/cli.js migrate:latest
@RaimoJohanson Uma maneira mais adequada de fazer isso seria
env $(cat .env) ./node_modules/.bin/knex migrate:latest
ou se você estiver usando um script NPM:
env $(cat .env) knex migrate:latest
(o diretório .bin é resolvido automaticamente ao usar scripts npm)
@Jakobud Eu li sobre o diretório .bin sendo usado pelo Node internamente em scripts npm - obrigado por isso!
@Jakobud isso não funcionaria no Windows
Com vários arquivos .env
, pode ser uma solução usar a variável de ambiente DOTENV_CONFIG_PATH
. No meu package.json
, criei um script knex
que pega .env
e um test:knex
que funciona com .env.test
:
"scripts": {
"knex": "babel-node -r dotenv/config node_modules/.bin/knex",
"test:knex": "DOTENV_CONFIG_PATH=.env.test npm run knex"
}
Comentários muito úteis
Caso alguém venha aqui em busca de uma solução, aqui está o que eu faço (e funciona perfeitamente!)