Соединение Mongo закрыто в приложении keystonejs

Для моего проекта keystonejs я создал два контейнера докеров (один для монго, один для приложения keystonejs). Все работает хорошо, за исключением того, что я очень часто получаю сообщение об ошибке «соединение закрыто» при просмотре сайта (обычно, когда я не перемещался в течение нескольких минут). Полный стек ошибок приведен ниже:

Error thrown for request: /blog
Error: connection closed
    at null.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:618:45)
    at emitNone (events.js:67:13)
    at emit (events.js:166:7)
    at null.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:171:15)
    at emitTwo (events.js:87:13)
    at emit (events.js:172:7)
    at Socket.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:550:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at TCP._onclose (net.js:477:12)

Я провел некоторое расследование, и в другом сообщении о stackoverflow предлагается использовать параметр keepAlive для мангуста (mongoose выводит ошибку Ошибка: соединение закрыто). Однако я понятия не имею, как я могу использовать эти параметры в keystonejs. Кто-нибудь может помочь?

С уважением, Том


person Tom    schedule 21.06.2016    source источник


Ответы (3)


В документах по keystonejs упоминается

mongoose Object | Instance of Mongoose to be used instead of the default instance.

Так что создание своего собственного может сработать. Я только что выбрал параметры, упомянутые в ответе, который вы указали.

const mongoOptions =
{
    db: {safe: true},
    server: {
        socketOptions: {
            keepAlive: 1
        }
    },
    replset: {
        rs_name: 'myReplSet',
        socketOptions: {
            keepAlive: 1
        }
    }
};

mongoose.connect( YOUR_URI, mongoOptions );

keystone.set('mongoose', mongoose);
person user01    schedule 21.06.2016
comment
Спасибо, не совсем то, что вы говорите, но, кажется, у меня это работает - person Tom; 21.06.2016

У меня это работает так:

var mongoose = require('mongoose');

mongoose.set('server', {
        socketOptions: {
            keepAlive: 1
        }});

keystone.set('mongoose', mongoose);

Привет, Том

person Tom    schedule 21.06.2016

Если вы просто хотите настроить параметры мангуста для использования трапецеидального искажения, вы можете сделать это, не запуская свой собственный экземпляр мангуста.

Вы можете добавить параметры мангуста/монго, используя недокументированное свойство «опции монго» конфигурации трапецеидального искажения, например

keystone.init({
    'mongo': 'yourMongoURI',
    'mongo options': { server: { keepAlive: 1 }}
});
person zewt112    schedule 29.12.2016