最近,我接手了一个由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)
这是我已经完成的快速清单:
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上启动应用程序。
答案 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)