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