使用环境变量进行本地 sequelize 配置
Posted
技术标签:
【中文标题】使用环境变量进行本地 sequelize 配置【英文标题】:using an enviroment variable for local sequelize configuration 【发布时间】:2016-12-10 00:13:41 【问题描述】:我希望使用 sequelize 在我的项目的 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 数据库的组合连接字符串,要么需要一种在 config.json 中使用变量的方法。有什么解决办法吗?
【问题讨论】:
【参考方案1】:您应该将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"
;
注意:更新您的 .sequelizerc
文件以匹配新的配置文件。
"config": path.resolve('./config', 'config.js'),
【讨论】:
只是预感,点击上面的链接查看如何从他们的文档.sequelizerc docs更新您的 .sequelizerc 文件 挣扎了一个小时后,尝试谷歌搜索并找到答案。我的问题解决了。谢谢【参考方案2】:我为此做了很多工作。如果你运行heroku run bash
,我不知道为什么 Sequelize 在环境中不使用生产。我能够通过根据JAWSDB_URL
而不是NODE_ENV
修改Sequelize 对象来使其工作。
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));
)
【讨论】:
【参考方案3】:在根目录下创建一个 .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 文件夹中创建 config.js。在 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),
,
,
然后运行迁移和播种。
【讨论】:
【参考方案4】:假设您使用的是 Passport、Sequelize、MySql:
在通过 sequelize 设置的 index.js 文件中,查找这一行:
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"
...
这意味着您应该从 config.json 中删除该 key:value。
去应该很好,你不必转换任何东西。 Sequelize 会处理所有这些。
【讨论】:
我忘记添加的一件事是您可能必须删除(重置)您的数据库/表才能完成这项工作。【参考方案5】:您也可以使用 use_env_variable 进行开发。您似乎已经在使用 dotenv,所以我假设您已经设置了一个 .env 文件。只需添加这一行:
LOCALDB=mysql://[user]:[pass]@[sqldomain]/[db name]
根据需要替换 [] 中的内容,并在您的配置文件中将“use_env_variable”设置为 LOCALDB,就像您将 JAWSDB 用于生产一样。
【讨论】:
以上是关于使用环境变量进行本地 sequelize 配置的主要内容,如果未能解决你的问题,请参考以下文章
java环境配置和开发软件Eclipse如何安装,详细说明下,包过环境变量设置?谢谢