【问题标题】:sequalize migration with dotenv使用 dotenv 续集迁移
【发布时间】:2018-01-29 03:41:19
【问题描述】:

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

我正在使用 sequelize 迁移,它在 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

【问题讨论】:

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


    【解决方案1】:

    如果您使用的是 2.0 或更高版本,config/config.js 是默认值之一,因此不必担心。

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

    【讨论】:

      【解决方案2】:

      我认为最好的方法是使用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 将填充环境变量,然后运行命令,因此您的动态设置应该都适用于您现有的配置文件

      【讨论】:

      • 一个细微的变化是安装 dotenv-cli 作为开发依赖项。然后就可以在本地运行npx dotenv -e .env sequelize db:migrate了。
      【解决方案3】:
      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

      【讨论】:

        【解决方案4】:

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

        sequelize db:migrate --env production
        

        【讨论】:

        • 感谢您的回答,只是想指出最新版本的文档中没有明确提到它,这是暗示的。运行 npx sequelize-cli --help 时甚至都不可用
        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        相关资源
        最近更新 更多