2017-01-04 2 views
1

Недавно я принял приложение 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.

ответ

1

я успешно использовал MLAB в проекте парусов в последнее время, но я использовал формат строки URL Монго, например ...

mongodbServer: { 
     adapter: 'sails-mongo', 
     url : "mongodb://dandanknight:[email protected]:44979/databasename" 
    } 

Не уверен, если это поможет, но не может повредить пытаться! Это также единственный способ, которым я успешно получил replicaSet, работающий в Sails, кстати.

Это сбивает с толком, но я прочитал паруса-Монго документов, как «URL, это путь вперед, и передача объекта является использованием устаревшего» (here)

+0

Спасибо людей !! – krekto

Смежные вопросы