Knex: Usando knex com dotenv

Criado em 4 dez. 2014  ·  19Comentários  ·  Fonte: knex/knex

Oi,
existe uma maneira simples de usar o Knex e a migração / semente CLI com dotenv ?

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!)

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

Todos 19 comentários

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"
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tjwebb picture tjwebb  ·  3Comentários

zettam picture zettam  ·  3Comentários

npow picture npow  ·  3Comentários

sandrocsimas picture sandrocsimas  ·  3Comentários

lanceschi picture lanceschi  ·  3Comentários