Knex: dotenv рдХреЗ рд╕рд╛рде knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 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

рдореЗрд░реЗ рд╡рд┐рд▓рдп рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЛрдИ рд░рд┐рд▓реАрдЬрд╝ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЖрдк рдпрд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡рд╛рддрд╛рд╡рд░рдг рдПрдХ рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрджрд╛рдиреБрдХреНрд░рдо рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ (рдбреЙрдЯреЗрдирд╡ рдПрдХ рд╕рд░рд▓ рд╣реИ)ред рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

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 рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЬрдм рдореИрдВрдиреЗ рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдпрд╣ рддрдм рдХрд╛рдо рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ node -r dotenv/config ./node_modules/knex/bin/cli.js migrate:latest рдмрджрд▓ рджрд┐рдпрд╛ред

рдирдорд╕реНрддреЗ, рд╣рд░ рдХреЛрдИ рд╕рд╛рдЗрд▓реЗрдВрдЯ рдореЛрдб рдореЗрдВ knex рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭрд╕реЗ рдкреВрдЫреЗ рдмрд┐рдирд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫреЗ рдмрд┐рдирд╛, рдореИрдВ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

@kcheang рдореБрдЭреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореБрдЭреЗ dotenv_config_path рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмреЗрдмреЗрд▓ (ES6) рдХреЗ рд╕рд╛рде рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
'dotenv' рд╕реЗ dotenv рдЖрдпрд╛рдд рдХрд░реЗрдВ;
dotenv.config ();

рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ('knex')({
рдбрд┐рдмрдЧ: рд╕рдЪ,
рдХреНрд▓рд╛рдЗрдВрдЯ: 'mysql',
рдХрдиреЗрдХреНрд╢рди: {
рд╣реЛрд╕реНрдЯ: рдкреНрд░рдХреНрд░рд┐рдпрд╛.env.DB_HOST,
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдкреНрд░рдХреНрд░рд┐рдпрд╛.env.DB_USER,
рдкрд╛рд╕рд╡рд░реНрдб: рдкреНрд░рдХреНрд░рд┐рдпрд╛.env.DB_PW,
рдбреЗрдЯрд╛рдмреЗрд╕: process.env.DB,
рд╡рд░реНрдгрд╕реЗрдЯ: 'utf8',
}
});

@gerbus рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рдмреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА?

рдЬрдм рдореИрдВрдиреЗ рдПрдирдкреАрдПрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдпрд╣ рддрдм рдХрд╛рдо рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ 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 (npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп .bin рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ)

@Jakobud рдореИрдВрдиреЗ .bin рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@ рдЬреИрдХреЛрдмреБрдб рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рдПрдХрд╛рдзрд┐рдХ .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 рд░реЗрдЯрд┐рдВрдЧреНрд╕