Sails.js - 在mLab上使用远程MongoDB的授权问题,但在本地工作正常

时间:2017-01-04 15:25:00

标签: mongodb heroku sails.js

最近,我接手了一个由Web开发人员组成的小团队为我们公司创建的Sails.js应用程序。他们为我提供了源代码和数据库转储。现在,我的任务是在Heroku上运行它。虽然当我在本地运行应用程序时一切正常,但通过远程连接启动时出现错误,说:

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的新手,所以即使不知道,我也可能做错了。我希望我可以将应用程序视为“黑盒子”(或者像通用节点应用程序),因为我的工作只是在Heroku上启动应用程序。

1 个答案:

答案 0 :(得分:2)

我最近在Sails项目中成功使用了mLab,但我使用了Mongo URL字符串格式,例如......

mongodbServer: {
        adapter: 'sails-mongo',
        url    : "mongodb://dandanknight:som3P455w0rd@ds044979.mlab.com:44979/databasename"
    }

不确定它是否有帮助,但尝试不会受到伤害!这也是我成功获得一个在Sails中工作的replicaSet的唯一方法。

令人困惑,但我读了sails-mongo docs&#34; URL是前进的方向,传递一个对象是遗留用法&#34; (here