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 \ СБН