로컬 속편 설정에 환경 변수 사용
속편을 사용하여 프로젝트의 config.json 파일 내의 환경변수를 사용하려고 합니다.dotenv를 사용하여 환경변수를 로컬로 설정하고 있습니다.config.json 파일은 다음과 같습니다.
{
"development": {
"username": process.env.DB_USER,
"password": process.env.DB_PASS,
"database": process.env.DB_DATABASE,
"host": process.env.DB_HOST,
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"use_env_variable": "JAWSDB_URL",
"dialect": "mysql"
}
}
문제는 config.json 파일 내의 변수를 사용할 수 없다는 것입니다.실제 환경에서는 "use_env_varable" 키를 사용하여 연결 문자열에 env 변수를 사용할 수 있습니다.따라서 로컬 mysql db의 결합 연결 문자열을 계산하거나 config.json 내의 변수를 사용하는 방법이 필요합니다.해결방법은?
변해야 한다config.json로 줄지어 가다.config.js모듈로 이행합니다.require그dotenv맨 위에.
require('dotenv').config(); // this is important!
module.exports = {
"development": {
"username": process.env.DB_USERNAME,
"password": process.env.DB_PASSWORD,
"database": process.env.DB_DATABASE,
"host": process.env.DB_HOST,
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
};
메모: 새 구성 파일과 일치하도록 파일을 업데이트합니다.
"config": path.resolve('./config', 'config.js'),
나는 꽤 오랫동안 이 일을 했다.Sequelize가 말 그대로 환경에 있는데 왜 실제 가동 환경을 사용하지 않는지 모르겠습니다.heroku run bash. Sequelize 오브젝트를 수정하여 동작시킬 수 있었습니다.JAWSDB_URL,가 아니라NODE_ENV.
require("dotenv").config();
const express = require("express")
const app = express();
let seq;
//express app configuration
if (process.env.JAWSDB_URL) {
console.log("There is a JAWS DB URL")
seq = new Sequelize(process.env.JAWSDB_URL)
}
else {
seq = require("./models").sequelize
}
seq.sync().then(() => {
app.listen(PORT, () => console.log('server started on port ' + PORT));
})
루트 디렉토리에 .sequelizerc 파일을 만듭니다.
var path = require('path');
module.exports = {
'config': path.resolve('server/config', 'config.js'),
'models-path': path.resolve('server/models'),
'seeders-path': path.resolve('server/seeders'),
'migrations-path': path.resolve('server/migrations')}
그런 다음 config.js를 config 폴더에 만듭니다.config.js에서 다음 코드 사용
const dotenv = require("dotenv");
dotenv.config({ path: "config.env" });
module.exports = {
development: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DBNAME,
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT,
encrypt: process.env.DB_ENCRYPT,
pool: {
max: parseInt(process.env.DB_POOL_MAX),
min: parseInt(process.env.DB_POOL_MIN),
acquire: parseInt(process.env.DB_POOL_ACQUIRE),
idle: parseInt(process.env.DB_POOL_IDLE),
},
},
그 후 이행과 시드러를 실행합니다.
Passport, Sequelize, MySql을 사용하는 경우:
index.js 파일 셋업에서 sequelize를 실행하면 다음 행을 찾습니다.
var sequelize = new Sequelize(config.database, config.username, config.password, config);
다음 항목으로 변경해 보십시오.
var sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, config);
.env에는 다음이 필요합니다.
DB_USERNAME:root (or whatever your username is)
DB_PASSWORD:NYB (whatever your password is)
DB_DATABASE:whatever_your_dbNameis_db
마지막으로, 여권 전략의 설정에 따라 다음과 같은 내용을 찾습니다.
user.sequelize.sync().then(function(){
}...
다음을 배치해야 합니다.database:process.env.DB_DATABASE
user.sequelize.sync().then(function(){
database:"process.env.dbn"
}...
즉, 해당 key:value를 config.json에서 삭제해야 합니다.
가는 것이 좋을 것이고 당신은 아무것도 바꿀 필요가 없을 것이다.시퀄라이즈가 그 모든 것을 처리해 줄 것이다.
config.js 파일은 다음과 같습니다.
const fs = require('fs');
require('dotenv').config();
module.exports = {
"development": {
"username": process.env.DB_USERNAME,
"password": process.env.DB_PASSWORD,
"database": process.env.DB_DATABASE,
"host": process.env.DB_HOST,
"dialect": process.env.DB_CONNECTION
},
"test": {
"username": process.env.DB_USERNAME,
"password": process.env.DB_PASSWORD,
"database": process.env.DB_DATABASE,
"host": process.env.DB_HOST,
"dialect": process.env.DB_CONNECTION
},
"production": {
"username": process.env.DB_USERNAME,
"password": process.env.DB_PASSWORD,
"database": process.env.DB_DATABASE,
"host": process.env.DB_HOST,
"dialect": process.env.DB_CONNECTION
}
};
개발에도 use_env_module을 사용할 수 있습니다.이미 dotenv를 사용하고 있는 것 같기 때문에 .env 파일은 이미 셋업되어 있다고 생각합니다.여기에 다음 행을 추가합니다.
LOCALDB=http://[user]:[pass]@[sqldomain]/[db name]
필요에 따라 [] 및 구성 파일 세트 "use_env_variable"을 LOCALDB로 치환합니다.이는 실제 가동에 JAWSDB를 사용하는 경우와 동일합니다.
언급URL : https://stackoverflow.com/questions/38757728/using-an-enviroment-variable-for-local-sequelize-configuration
'programing' 카테고리의 다른 글
| Access-Control-Allow-Origin 및 Angular.js $http (0) | 2023.04.03 |
|---|---|
| springboot 2.3.5로부터의 업그레이드.2.4.1로 릴리즈 - ClassNotFoundException: org.springframework.boot.context.properties.Configuration Bean Factory Metadata (0) | 2023.04.03 |
| 숫자와 범위가 있는 루프용 AngularJS (0) | 2023.04.03 |
| ASP.NET MVC 검증 폼(Angular 포함)JS (0) | 2023.04.03 |
| useRef "값을 참조하지만 여기서 유형으로 사용되고 있습니다." (0) | 2023.04.03 |