使用dotenv进行迁移

时间:2017-08-21 06:44:11

标签: json node.js sequelize.js sequelize-cli

我在dotenv文件中保存我的数据库配置。

我正在使用sequelize migration,它在config文件夹中有一个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

4 个答案:

答案 0 :(得分:2)

如果您使用的是2.0版或更高版本#include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/filters/passthrough.h> #include <pcl/visualization/pcl_visualizer.h> // Define min and max for X, Y and Z float minX = -0.1, minY = -0.5, minZ = -2.5; float maxX = +0.1, maxY = +0.5, maxZ = +2.5; int main (int argc, char** argv) { pcl::visualization::PCLVisualizer viewer("Cloud Viewer"); pcl::PointCloud<pcl::PointXYZRGBA>::Ptr body (new pcl::PointCloud<pcl::PointXYZRGBA>); pcl::io::loadPCDFile ("body.pcd", *body); pcl::PointCloud<pcl::PointXYZRGBA>::Ptr bodyFiltered (new pcl::PointCloud<pcl::PointXYZRGBA>); pcl::PassThrough<pcl::PointXYZRGBA> filter; filter.setInputCloud (body); filter.setFilterFieldName ("x"); filter.setFilterLimits (minX, maxX); filter.setFilterFieldName ("y"); filter.setFilterLimits (minY, maxY); filter.setFilterFieldName ("z"); filter.setFilterLimits (minZ, maxZ); filter.filter (*bodyFiltered); viewer.addPointCloud (bodyFiltered,"body"); viewer.spin(); return 0; } 是默认设置之一,那么这不应该是一个问题。

您还可以创建一个config/config.js文件,如果您愿意,可以覆盖此路径和/或名称。它在“选项”下的the documentation中。

答案 1 :(得分:1)

我认为使用dotenv-cli来完成此任务的最佳方法。

  1. 安装dotenv-cli(在本地或全局
  2. 确保已在应用程序的根目录中创建了.sequelizerc文件。它应该看起来像这样:
const path = require('path')

module.exports = {
  config: path.resolve('config', 'config.js')
}
  1. 按如下所示运行命令:dotenv -e path/to/.env sequelize db:migrate

dotenv-cli将填充环境变量,然后运行命令,因此您的动态设置应该都可以与现有配置文件一起使用

答案 2 :(得分:1)

  1. 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,
    },
  },
};
  1. 使用以下内容创建一个.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'),
};
  1. 运行sequelize db:migrate

答案 3 :(得分:0)

Sequelize确实在其文档中提到了这一点。您可以通过指定环境来运行migrations命令。

sequelize db:migrate --env production