Я успешно развернул свое приложение на герою. Но это не загружает данные из базы данных - PullRequest
0 голосов
/ 08 января 2020

Я успешно развернул свое приложение на heroku. Но это не загружает мои данные. После исследования нескольких статей и руководств я нигде не нашел, как подключить мои локальные данные postgresql к аддонам heroku.

Мое приложение отлично работает локально. Когда я проверил проблему в браузере, она показала connect ECONNREFUSED 127.0.0.1:5432.

Я добавляю дополнения Heroku postgres и добавляю учетные данные в настройки базы данных, но все равно не работает. Я полностью потерян.

Это мои настройки базы данных

const sequelize = require("./node_modules/sequelize");

var con = new sequelize("image", "postgres", "password", {
  host: "localhost", //i think the error comes from here
  dialect: "postgres",

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  }
});

const Person = con.define("person", {
  image: {
    type: sequelize.STRING,
    allowNull: false
  },
  firstname: {
    type: sequelize.STRING,
    allowNull: false
  },
  lastname: {
    type: sequelize.STRING,
    allowNull: false
  },
  email: {
    type: sequelize.STRING,
    allowNull: false,
    validate: {
      isEmail: true
    }
  }
});

const Post = con.define("post", {
  title: { type: sequelize.STRING },
  content: { type: sequelize.STRING },
  personid: { type: sequelize.INTEGER, foreignKey: true }
});

const Parent = con.define("parent", {
  father: { type: sequelize.STRING },
  mother: { type: sequelize.STRING },
  personid: { type: sequelize.INTEGER }
});

//con.sync({ force: true });

module.exports = con;

Это мой Node js 'express сервер

const express = require("express");
const app = express();

const graphqlHTTP = require("express-graphql");
const schema = require("./schema");
const cors = require("cors");
const path = require("path");

app.use(cors());

app.use(
  "/graphql",
  graphqlHTTP({
    schema,
    pretty: true,
    graphiql: true
  })
);
app.use(express.static("build"));

app.get("*", (req, res) => {
  res.sendFile(path.resolve(__dirname, "build", index.html));
});

const port = process.env.PORT || 8081;
app.listen(port, () =>
  console.log(`✅  Example app listening on port ${port}!`)
);

Я изменил свою базу данных следующим образом

require("dotenv").config();

const sequelize = require("./node_modules/sequelize");

const con = new sequelize(process.env.DATABASE_URL, {
  dialect: "postgres",
  protocol: "postgres",
  dialectOptions: {
    ssl: true
  }
});

Теперь она отлично работает на моем ноутбуке, но не работает на других устройствах.

Вот ссылка: https://apask.herokuapp.com/

1 Ответ

0 голосов
/ 08 января 2020

вам нужно добавить переменные окружения в ваше приложение ... dotenv, следуйте инструкциям и затем установите DATABASE_URL соответствующим образом в вашей конфигурации heroku (он может сделать это сам по себе, когда вы настраиваете postgres, это бесплатное добавление на до 10000 строк, так что добавьте их, а затем экспортируйте и импортируйте базу данных, которую вы используете локально, в этот экземпляр heroku postgres) .. вы можете протестировать его локально, сделав DATABASE_URL = localhost, и играть с ним, пока он не будет работать .. в вашем развертывании фактически не будет файла .env, поэтому он будет принимать конфигурационные переменные heroku

sooo ... вместо вашего локально закодированного локального хоста вам нужно сделать что-то вроде process.env.DATABASE_URL в вашем коде и установите DATABASE_URL в вашем файле .env локально для тестирования ... тогда ваше приложение поднимет его ... если вы посмотрите на вкладку настроек в вашем приложении heroku, я подозреваю, что DATABASE_URL уже есть ... как только вы установили его работу локально что проще, это будет просто работать в героку .. я могу помочь тебе больше, когда ты приблизишься примеры кода

Приветствия

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