我已经使用MongoDB和猫鼬在Hapi上构建了一个节点应用程序。在本地,我可以使用该应用程序,没有问题。我可以连接到数据库,添加数据,找到它,等等。
我在数字海洋上创建了一个Ubuntu14.04 x64液滴。
我可以在液滴中输入ssh,并验证我的数据库是否有正确的名称。我使用dokku-alt进行部署,并使用dokku的mongodb:link appName mydb将db名称链接到应用程序
有一次我部署了这个应用程序,它会挂起并最终超时,我遇到了一些问题。经过大量调试和注释代码之后,我发现每当我尝试像这样点击mongo时,应用程序就会挂起:
var User = request.server.plugins.db.User;
User
.findOne({ id: request.auth.credentials.profile.raw.id })
.exec(function(err, user){
// do something
});没有这一点,应用程序就可以很好地加载,尽管没有数据。所以我的想法是猫鼬从来没有正确地连接过。
我正在使用grunt-shell产卵来运行一个脚本,该脚本检查mongo是否已经运行,如果没有,它将启动它。我不能百分之百肯定这是水滴上需要的,但是我在当地遇到了问题,芒果已经在运行了…剧本:
/startMongoIfNotRunning.sh
if pgrep mongod; then
echo running;
else
mongod --quiet --dbpath db/;
fi
exit 0;/Gruntfile.js
shell: {
make_dir: {
command: 'mkdir -p db'
},
mongodb: {
command: './startMongoIfNotRunning.sh',
options: {
stdin: false,
}
}
},下面是我定义数据库位置的方法:
/index.js
server.register([
{ register: require('./app/db'), options: { url: process.env.MONGODB_URL || 'mongodb://localhost:27017/mydb' } },
..../app/db/index.js
var mongoose = require('mongoose');
var _ = require('lodash-node');
var models = require('require-all')(__dirname + '/models');
exports.register = function(plugin, options, next) {
mongoose.connect(options.url, function() {
next();
});
var db = mongoose.connection;
plugin.expose('connection', db);
_.forIn(models, function(value, key) {
plugin.expose(key, value);
});
};
exports.register.attributes = {
name: 'db'
};我的应用程序正在db/中寻找db文件。可能是dokku的mongodb:link appName mydb把它和错误的地点联系起来了吗?也许process.env.MONGODB_URL没有被正确设置?我真的不知道从这里往哪里走。
发布于 2015-02-16 18:34:01
结果,解决我的问题的方法是在我的液滴的主机文件中添加一个条目,指向mongo url:
127.0.0.1 mongodb.myurl.com出于某种原因,用Dokku将db链接到我的应用程序并没有添加这一点。我本以为是自动的。当我将数据库链接到应用程序时,应用程序容器的主机文件确实得到了一个mongodb条目。
https://stackoverflow.com/questions/28484104
复制相似问题