programing

로컬 속편 설정에 환경 변수 사용

minimums 2023. 4. 3. 21:23
반응형

로컬 속편 설정에 환경 변수 사용

속편을 사용하여 프로젝트의 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모듈로 이행합니다.requiredotenv맨 위에.

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

반응형