使用 dotenv 续集迁移
sequalize migration with dotenv
我正在将我的数据库配置保存在 dotenv 文件中。
我正在使用 sequelize 迁移,它在配置文件夹中有一个 config.json 文件:
{
"development": {
"username": "root",
"password": null,
"database": "test",
"host": "127.0.0.1",
"dialect": "postgres"
},
....
}
因为我在dotenv中有配置,所以我必须把它转换成js文件:
require('dotenv').config({ silent: env === 'production'})
const devConfig = {
dialect: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || '',
username: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
migrationStorageTableName: 'migrations'
};
module.exports = {
development: devConfig,
production: devConfig
};
但是我如何 运行 迁移,配置不是 JSON?
node_modules/.bin/sequelize db:migrate --config config/config.js
如果您使用的是 2.0 或更高版本,config/config.js
是默认设置之一,因此您不必担心。
如果愿意,您还可以创建一个 .sequelizerc
文件来覆盖此路径 and/or 名称。它在 "Options" 下的 the documentation 中。
我认为最好的方法是使用 dotenv-cli。
- 安装 dotenv-cli(本地或全局
- 确保您已在应用程序的根目录中创建了一个
.sequelizerc
文件。它应该看起来像这样:
const path = require('path')
module.exports = {
config: path.resolve('config', 'config.js')
}
- 运行命令如下:
dotenv -e path/to/.env sequelize db:migrate
dotenv-cli 将填充环境变量,然后 运行 命令,因此您的动态设置应该与您现有的配置文件一起工作
- 将
config.json
重命名为config.js
并在里面调用你的环境变量。
module.exports = {
development: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
},
test: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
},
production: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
},
};
- 使用以下内容创建
.sequelizerc
文件:
'use strict';
require('dotenv').config(); // don't forget to require dotenv
const path = require('path');
module.exports = {
'config': path.resolve('config', 'config.js'),
'models-path': path.resolve('models'),
'seeders-path': path.resolve('seeders'),
'migrations-path': path.resolve('migrations'),
};
- 运行
sequelize db:migrate
Sequelize 在他们的文档中确实提到了这一点。您可以通过指定环境来 运行 迁移命令。
sequelize db:migrate --env production
我正在将我的数据库配置保存在 dotenv 文件中。
我正在使用 sequelize 迁移,它在配置文件夹中有一个 config.json 文件:
{
"development": {
"username": "root",
"password": null,
"database": "test",
"host": "127.0.0.1",
"dialect": "postgres"
},
....
}
因为我在dotenv中有配置,所以我必须把它转换成js文件:
require('dotenv').config({ silent: env === 'production'})
const devConfig = {
dialect: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || '',
username: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
migrationStorageTableName: 'migrations'
};
module.exports = {
development: devConfig,
production: devConfig
};
但是我如何 运行 迁移,配置不是 JSON?
node_modules/.bin/sequelize db:migrate --config config/config.js
如果您使用的是 2.0 或更高版本,config/config.js
是默认设置之一,因此您不必担心。
如果愿意,您还可以创建一个 .sequelizerc
文件来覆盖此路径 and/or 名称。它在 "Options" 下的 the documentation 中。
我认为最好的方法是使用 dotenv-cli。
- 安装 dotenv-cli(本地或全局
- 确保您已在应用程序的根目录中创建了一个
.sequelizerc
文件。它应该看起来像这样:
const path = require('path')
module.exports = {
config: path.resolve('config', 'config.js')
}
- 运行命令如下:
dotenv -e path/to/.env sequelize db:migrate
dotenv-cli 将填充环境变量,然后 运行 命令,因此您的动态设置应该与您现有的配置文件一起工作
- 将
config.json
重命名为config.js
并在里面调用你的环境变量。
module.exports = {
development: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
},
test: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
},
production: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'postgres',
logging: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
},
};
- 使用以下内容创建
.sequelizerc
文件:
'use strict';
require('dotenv').config(); // don't forget to require dotenv
const path = require('path');
module.exports = {
'config': path.resolve('config', 'config.js'),
'models-path': path.resolve('models'),
'seeders-path': path.resolve('seeders'),
'migrations-path': path.resolve('migrations'),
};
- 运行
sequelize db:migrate
Sequelize 在他们的文档中确实提到了这一点。您可以通过指定环境来 运行 迁移命令。
sequelize db:migrate --env production