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 ๋๋ถ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ํนํ ์ ์๊ฒ ๋ฌธ์ ๋ knexfile.js๊ฐ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ํ๋ก์ ํธ์ ํ์ ๋๋ ํ ๋ฆฌ๋ผ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๊ฒฝ๋ก๋ฅผ ์ ๋ฌํ์ง ์๊ณ ๋ ๋ด .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)์ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
```์๋ฐ์คํฌ๋ฆฝํธ
'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 Node๊ฐ ๋ด๋ถ์ ์ผ๋ก npm ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ .bin ๋๋ ํ ๋ฆฌ์ ๋ํด ์ฝ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
@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"
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๊ตฐ๊ฐ๊ฐ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ณ ์ฌ๊ธฐ์ ์ฌ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ด๊ฐํ๋ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค (๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค!)