Как заставить герою использовать экологический конфиг для БД - PullRequest
1 голос
/ 29 июня 2019

Heroku указывает в журналах, что пытается связаться с осколком MongoDB, который я не использую (но использовал один раз). Сообщение об ошибке гласит:

"не удалось подключиться к серверу [swarmage-shard-00-00-ekq8j.gcp.mongodb.net:27017]"

но я понятия не имею, почему он пытается подключиться к этому серверу.

Я развертываю приложение node.js на heroku. Heroku связан с моей базой данных MLAB. Я могу через оболочку Монго взаимодействовать с базой данных. Когда я работаю на локальном сервере, почтальон может выполнять все операции CRUD с базой данных MLAB. Однако, когда я использую веб-адрес heroku в почтальоне, я получаю ошибку 503. Журнал показывает "MongoNetworkError" и "TransientTransactionError". Но главная проблема, я думаю, заключается в том, что он пытается связаться с осколком Облачного Атласа, который у меня больше не работает. У меня нет строк подключения в моем коде; все они устанавливаются переменными среды. Я обновил и дважды проверил, что в моей локальной системе установлены новые строки подключения и что heroku настроен для новых строк подключения. Я понятия не имею, откуда heroku (или mlab? Или mongodb?) Извлекает старый осколок соединения.

Я попытался сбросить настройки как для heroku, так и для локального сервера. Я пытался найти старый экземпляр осколка на cluster atlas, но не могу. Все работает, пока я не попытаюсь использовать почтальона, чтобы связаться с адресом герою.

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

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

Я не думаю, что код поможет, но для показа кода (все работает на Github )

производственная конфигурация:

{
  "name": "SwarmAge - Production",
  "mail": {
    "host": "prod-mail-server"
  },
  "title": "Welcome to the Swarm Age"

}

заказ экологические-переменные

{
  "mail": {
    "password": "SwarmAge_password"
  },
  "jwtPrivateKey": "SwarmAge_jwtPrivateKey",
  "connectionString": "SwarmAge_db"
}

index.js

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

require("./startup/logging")();
require("./startup/routes")(app);
require("./startup/db")();
require("./startup/config")();
require("./startup/validation")();
require("./startup/prod")(app);
require("./startup/status")(app);

app.set("view engine", "pug");
app.set("views", "./views");

const port = process.env.PORT || 3000;
const server = app.listen(port, () =>
  winston.info(`Listening on port ${port}`)
);

module.exports = server;

конфигурация запуска

const config = require("config");

module.exports = function() {
  if (!config.get("jwtPrivateKey")) {
    throw new Error("FATAL ERROR: jwtPrivateKey is not defined.");
  }
};

пуск в эксплуатацию дБ

module.exports = function() {
  const db = config.get("connectionString");
  mongoose
    .connect(db, {
      useNewUrlParser: true,
      useFindAndModify: false
    })
    .then(() => winston.info(`Connected to ${db} . . .`));
};

из терминала, конфиги героку (чтобы добраться до Героку, откуда он берет осколок?): -------

C:\Users\tedgo\voter>heroku config

swarmage-backend-190625 Config Vars

NODE_ENV: production
SwarmAge_db: mongodb://AdminGLOC:fakopassword@ds155461.mlab.com:55461/heroku_6qxb8b19
SwarmAge_jwtPrivateKey: hidden
SwarmAge_password: not-important
jwtPrivateKey: took-this-out-as-well

мои настройки (чтобы перейти в Cluster Atlas - это работает)

SwarmAge_db=mongodb+srv://AdminGLOC:not-my-real-password@swarmage-0idyv.gcp.mongodb.net/development?retryWrites=true

А вот и сообщение об ошибке из журналов:

cat uncaughtExceptions.log { "Ошибка": { "имя": "MongoNetworkError", "errorLabels": [ "TransientTransactionError"]}, "уровень": "ошибка", "сообщение": "uncaughtException: не удалось подключиться к серверу [swarmage-shard-00-00-ekq8j.gcp.mongodb.net:27017] при первом подключении [MongoError: сбой аутентификации при неудачной аутентификации.] \ NMongoNetworkError: не удалось подключиться к серверу [swarmage-shard-00-00-ekq8j.gcp.mongodb.net:27017] при первом подключении [MongoError: сбой аутентификации при неудачной аутентификации.] \ N в пуле. (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ топологий \ server.js: 431: 11) \ п в Pool.emit (events.js: 189: 13) \ n при подключении (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ pool.js: 557: 14) \ п при обратном вызове (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ соединение \ connect.js: 109: 5) \ п на provider.auth.err (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ connect.js: 352: 21) \ п на _authenticateSingleConnection (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Auth \ auth_provider.js: 66: 11) \ п на sendAuthCommand (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Auth \ scram.js: 215: 18) \ п в Connection.messageHandler (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ connect.js: 334: 5) \ п в Connection.emit (events.js: 189: 13) \ n в ProcessMessage (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ connection.js: 364: 10) \ п в TLSSocket. (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ connection.js: 533: 15) \ п в TLSSocket.emit (events.js: 189: 13) \ n в addChunk(_stream_readable.js: 284: 12) \ n at readableAddChunk (_stream_readable.js: 265: 11) \ n в TLSSocket.Readable.push (_stream_readable.js: 220: 10) \ n на TLSWrap.onStreamRead [как onread] (Внутренний / stream_base_commons.js: 94: 17) " "стек":" MongoNetworkError: не удалось подключиться к серверу [swarmage-shard-00-00-ekq8j.gcp.mongodb.net:27017] при первом подключении [MongoError: сбой аутентификации при неудачной аутентификации.] \ N в пуле. (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ топологий \ server.js: 431: 11) \ п в Pool.emit (events.js: 189: 13) \ n при подключении (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ pool.js: 557: 14) \ п при обратном вызове (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ соединение \ connect.js: 109: 5) \ п на provider.auth.err (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Подключение \ connect.js: 352: 21) \ п на _authenticateSingleConnection (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Auth \ auth_provider.js: 66: 11) \ п на sendAuthCommand (C: \ Users \ tedgo \ node_modules \ MongoDB-ядро \ Lib \ Auth \ СБН

1 Ответ

0 голосов
/ 05 июля 2019

Этот ответ приходит от кодера Сантьяго Бельтрама. несколько вопросов.
- Во-первых, файл default.config, необходимый для хранения всех переменных, найденных в custom-environment-variable. Это не так. - Во-вторых, в models.supporters.js произошла ошибка, при которой в случае верблюда было написано «require ('jsonwebtoken')» «require ('jasonWebToken')». Это не потребует надлежащей программы. - В-третьих, не все зависимости появились в файле package.json. Как таковую героку не знал их включать.
После исправления кода и включения недостающих зависимостей в package.json с помощью флага --save программа была успешно развернута на heroku.

...