Недавно я принял приложение Sails.js, созданное для нашей компании небольшой командой разработчиков веб-сайтов. Они предоставили мне источник и базу данных. Теперь моя задача - запустить его и запустить на Heroku. Несмотря на то, что все работает нормально, когда я запустить приложение локально, с удаленного подключения возникает ошибка при запуске, который говорит:Sails.js - Проблемы с авторизацией с удаленным MongoDB на mLab, но работает нормально локально
MongoError: not authorized on heroku_gbntc8sf to execute command { createIndexes: "agendaJobs", indexes: [ { key: { name: 1, priority: -1, lockedAt: 1, nextRunAt: 1, disabled: 1 }, name: "findAndLockNextJobIndex1" }, { key: { name: 1, lockedAt: 1, priority: -1, nextRunAt: 1, disabled: 1 }, name: "findAndLockNextJobIndex2" } ] }
at Function.MongoError.create ([ROOT_DIR]/node_modules/mongodb-core/lib/error.js:31:11)
at [ROOT_DIR]/node_modules/mongodb-core/lib/topologies/server.js:793:66
at Callbacks.emit ([ROOT_DIR]/node_modules/mongodb-core/lib/topologies/server.js:94:3)
at null.messageHandler ([ROOT_DIR]/node_modules/mongodb-core/lib/topologies/server.js:235:23)
at Socket.<anonymous> ([ROOT_DIR]/node_modules/mongodb-core/lib/connection/connection.js:259:22)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:146:16)
at Socket.Readable.push (_stream_readable.js:110:10)
at TCP.onread (net.js:523:20)
Вот краткий список того, что я сделал уже:
- проверил журнал сборки на Heroku - никаких ошибок или предупреждений;
- настроить mlab Heroku надстройка, экспортировать базу данных, выполнить некоторые ручные проверки с панели приборов mLab - все выглядит нормально;
- удаленно удален из базы данных
mongo
иmongo://
URL, выполнил несколько простых запросов и получил информацию о привилегиях пользователей базы данных; - создал идентичный пользователь (с именем пользователя
heroku_gbntc8sf
, тем же паролем, той же ролью и т. Д.) В локальной базе данных.
Вот что конфигурация соединения выглядит следующим образом:
// config/connections.js
module.exports.connections = {
mongodb: {
adapter: 'sails-mongo',
user: 'heroku_gbntc8sf',
password: [HIDDEN],
host: 'ds159387.mlab.com',
port: 59387,
database: 'heroku_gbntc8sf'
},
// ...
}
// config/env/development.js
module.exports = {
models: {
connection: 'mongodb'
},
// ...
}
// config/env/production.js
module.exports = {
models: {
connection: 'mongodb'
},
// ...
}
На данный момент я бегу сервер локально, пытается подключиться к удаленной базе данных, чтобы исключить как можно больше переменных, как это возможно. Как я уже упоминал выше, когда я установил host
на '127.0.0.1'
и port
на 27017
, все работает нормально. У пользователя heroku_gbntc8sf
есть базовые разрешения readWrite
в обеих базах данных (локальные и удаленные). Насколько я знаю, эти две базы данных практически идентичны. И все же ...
Я прочитал значительную часть документации Sails.js, а также документацию по адаптеру sails-mongo
. Я искал похожие вопросы, но я не мог найти ничего подходящего. Я пробовал много разных вещей, в том числе несколько разных способов настройки соединения с базой данных, но эта ошибка всегда существует.
Причина, по которой я отправляю сообщение в StackOverflow, заключается в том, что я не могу рассчитывать на поддержку со стороны оригинальных авторов приложения на данный момент. Кроме того, я новичок в Sails.js, поэтому я мог бы сделать что-то неправильно, даже не зная. Я надеялся, что смогу уйти с рассмотрением приложения как «черного ящика» (или как общего приложения Node), так как моя работа - только запустить приложение на Heroku.
Спасибо людей !! – krekto