PouchDb в NodeJs: репликация прекращается через полчаса.Зачем? - PullRequest
0 голосов
/ 02 октября 2018

Я разработал систему с CouchDB 2.2.0 в качестве главной базы данных, PouchDB 7.0.0 в клиентах VueJS и сервером мониторинга базы данных с использованием PouchDB под NodeJS 8.11.1.

Я могу изменить данные вCouchDB с использованием Fauxton и клиентов браузера и мобильных устройств (PWA) быстро обновляется, даже если работает в течение нескольких дней.Это НЕ верно для сервера, на котором запущен PouchDB в NodeJS.Он будет точно отвечать на те же самые изменения , если не будет никаких изменений в течение 20 минут или более , после чего он просто тихо игнорирует все без исключения события в CouchDB

Я настраиваюсь на подготовку скелетареализация с NodeJS и Pouch и как можно меньшим количеством других зависимостей и обновит этот вопрос, если я что-то обнаружу;в то же время я хотел бы спросить ...

Есть ли какая-либо общеизвестная причина, по которой это может происходить?

Как я могу отследить причину, не начиная с нуля и постепенно восстанавливаязавершить приложение по кирпичику, пока не выйдет из строя?

Обновление 18-10-03

Кажется, я решил проблему, используя fs writeStream вместо console.log, не понимая, почему это должно иметь значение.

Мое полное тестовое приложение выглядит следующим образом:

const fs = require('fs');
const PouchDB = require('pouchdb');
const adptrMemory = require('pouchdb-adapter-memory');

var stream = fs.createWriteStream("/tmp/pouchLog", {flags:'a'});
const LG = (msg) => (stream.write(`${msg}
`));

const movesDB = process.env.LOCAL_DB;
LG(`Local :: ${movesDB}`);
LG(`Remote :: ${process.env.REMOTE_DB}`);

PouchDB.plugin(adptrMemory);

const movesDatabaseLocal = new PouchDB(movesDB);
const movesDatabaseRemote = new PouchDB(process.env.REMOTE_DB);


const repFromFilter = 'post_processing/by_new_inventory';
movesDatabaseLocal.replicate.from(movesDatabaseRemote, {
  live: true,
  retry: true,
  filter: repFromFilter,
})
  .on('change', (response) => {
    LG(`${movesDB} ***  NEW EXCHANGE REQUEST DELTA *** `);
    LG(`Database replication from: ${response.docs.length} records.`);
  })
  .on('active', () => {
    LG(`${movesDB} ***  NEW EXCHANGE REQUEST REPLICATION RESUMED ***`);
  })
  .on('paused', () => {
    LG(`${movesDB} ***  NEW EXCHANGE REQUEST REPLICATION ON HOLD ***`);
  })
  .on('denied', (info) => {
    LG(`${movesDB} ***  NEW EXCHANGE REQUEST REPLICATION DENIED *** ${info}`);
  })

  .on('error', err => LG(`Database error ${err}`));

Обратите внимание, что я до сих пор не вернул все первоначальные функции.Я могу сказать, что сбой после простоя происходит, если в приведенном выше коде используется console.log, но он исчезает после переключения на потоковую запись в журнал.

...