рдирдорд╕реНрддреЗ,
рд╡рд╣рд╛рдБ рдХреЗ рд╕рд╛рде Knex рдФрд░ рдкреНрд░рд╡рд╛рд╕ / рдмреАрдЬ CLI рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ dotenv ?
рдЖрдкрдХреЛ рдПрдХ 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"
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдЧрд░ рдХреЛрдИ рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ (рдФрд░ рдпрд╣ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!)