Диалект должен быть явно указан с v4.0.0 / Предлагаемые исправления не сработали - PullRequest
0 голосов
/ 06 мая 2019

Я копался в этой проблеме и не смог найти решение ни по одному из постов. Я надеюсь, что кто-то может помочь мне разобраться с этим, чтобы я мог развернуть свое приложение на Heroku.

Я попытался установить переменные окружения и включить диалект в обеих моделях index.js и config.json. Я объявляю это в конфиге.

config.json

{
  "development": {
    "username": "root",
    "password": null,
    "database": "ragnar_db",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "ragnar_db",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "use_env_variable": "JAWSDB_URL",
    "dialect": "mysql"
  }
}

modles/index.js:

"use strict";

var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var basename = path.basename(module.filename);
var env = process.env.NODE_ENV || "development";
var config = require(__dirname + "/../config/config.json")[env];
var db = {};

if (config.use_env_variable) {
  var sequelize = new Sequelize(process.env[config.use_env_variable]);
  console.log(process.env);
} else {
  var sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    config
  );
}

fs.readdirSync(__dirname)
  .filter(function (file) {
    return (
      file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
    );
  })
  .forEach(function (file) {
    var model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(function (modelName) {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

1 Ответ

0 голосов
/ 08 мая 2019

Ответ заключается в предоставлении кода для более старой версии Sequelize.

if (config.use_env_variable) {
  var sequelize = new Sequelize(process.env[config.use_env_variable]);
  console.log(process.env);
} else {
  var sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    {
      host: "host_name",
      dialect: "Your_dialect"
  });
}

Другой ответ - переинициализировать ваш Sequelize-cli и запустить команды для предоставления вашей базы данных. Затем запустите Sequelize -init, если вы все настроите через терминал, в init будет храниться ваш JAWSDB_URL для переменных среды, и он будет установлен в среде вашего узла и heroku. В противном случае он попросит вас вставить свой JAWSDB_URL в запросчик терминала. Это изменение по сравнению со старыми версиями, позволяющее Sequelize скрывать информацию БД лучше, чем раньше, но если вы используете самую новую версию со старым кодом, это должно быть как в файле conf.json / config.js, так и в models / index.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...