У меня есть приложение для узлов, построенное на Hapi с использованием MongoDB и мангуста. Локально я могу использовать приложение без проблем. Я могу подключиться к db, добавить данные, найти их и т. Д.Mongoose не подключается к Ubuntu Ubuntu 14.04
Я создал каплю Ubuntu 14.04 x64 на Digital Ocean.
Я могу сделать ssh в свою капельку и проверить, что мой db там с правильным именем. Я использую dokku-alt для развертывания, и я связал имя db с приложением, используя dokku's mongodb:link appName mydb
У меня возникали проблемы после того, как я развернул приложение, в котором он будет висеть и в конечном итоге истечет время ожидания. После того, как много отладки и комментирования кода я обнаружил, что каждый раз я пытаюсь ударить Монго, как это приложение будет висеть:
var User = request.server.plugins.db.User;
User
.findOne({ id: request.auth.credentials.profile.raw.id })
.exec(function(err, user){
// do something
});
Без этого, приложение нагрузки хорошо, хотя и без данных. Поэтому я думал, что мангуст никогда не соединяется должным образом.
Я использую grunt-shell-spawn для запуска скрипта, который проверяет, работает ли mongo, если он не запускает его. Я не 100% уверен, что это необходимо по капельке, но у меня были проблемы на местном уровне, где Монго был уже запущен ... сценарий:
/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/
. Может ли быть, что dokku's mongodb:link appName mydb
связал его с неправильным местоположением? Возможно process.env.MONGODB_URL
настроен неправильно? Я действительно не знаю, куда идти отсюда.