2015-02-12 2 views
0

У меня есть приложение для узлов, построенное на 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 настроен неправильно? Я действительно не знаю, куда идти отсюда.

ответ

0

Оказывается, решение моей проблемы было добавление записи в файл хостов моей капельке, чтобы указать на Монго дб URL:

127.0.0.1 mongodb.myurl.com 

По какой-то причине, связывая дб мое приложение с Докку не добавил этот бит. Я бы подумал, что это было автоматически. Файл хоста контейнера приложения получил запись mongodb, когда я связал db с приложением.

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