0

Bitrix24 не работает push

  1. Проблема с push-сервером
  2. Ошибка с функцией padStart()
  3. Замена функции padStart простым кодом

Проблема с push-сервером

После установки из 1С-Битрикс: Веб-окружение коробочной версии Bitrix24 не работает push, не приходят уведомления через локальный сервер (красная строка Отсутствует соединение с сервером). В настройках Push and Pull был выбран локальный сервер с Виртуальной машиной 7.3 и новее (Bitrix Push server 2.0), остальные настройки по-умолчанию:

bitrix24 не работает push

Ошибка с функцией padStart()

В логах push-сервера (/var/log/push-server/error и /var/log/push-server/system-error) повторялась одна и та же ошибка:

uncaughtException: (++requestId).toString(...).padStart is not a function 

Как оказалось, функция padStart появилась в node 7 версии, а с окружением установился node 6 (почему так – вопрос к разработчикам):

node --version
v6.17.1

Замена функции padStart простым кодом

Функция padStart заполняет строку другой строкой до определенной длины и используется в push-сервере для создания уникальных идентификаторов лог-записей. Лучшим решением, конечно же, было бы обновить node до 8 версии. Но так как я не знаю, на каких модулях это может отразится, было решено заменить функцию padStart на простой код, тем более что встречается функция всего лишь два раза.

Открываем редактором /opt/push-server/lib/debug/index.js и в функции getUniqueId() заменяем ‘return process.pid + “T” + (++requestId).toString().padStart(8, “0”);’ на следующий код:

function getUniqueId()
{
    newRequestId = (++requestId).toString();
    while(newRequestId.length < 8){
        newRequestId = '0'+ newRequestId;
    }
    return process.pid + "T" + newRequestId;

//  return process.pid + "T" + (++requestId).toString().padStart(8, "0");
}

и в /opt/push-server/lib/storages/redis.js в функции getMessageId(callback) заменяем ‘const id = Buffer.from(startDate + messageCounter.toString().padStart(16, “0”), “hex”);’ на:

while(messageCounter.toString().length < 16){
    messageCounter = "0"+ messageCounter.toString();
}
const id = Buffer.from(startDate + messageCounter.toString(), "hex");
//const id = Buffer.from(startDate + messageCounter.toString().padStart(16, "0"), "hex");

В обоих файлах остались закомментированные оригинальные строки.

После этого перезагружаем push-сервер:

service push-server restart

На этом все. Сервер запустится, а в логах больше не будет ошибок связанных с функцией padStart и пропадет надоедливая строка на портале Отсутствует соединение с сервером.

Статья по данной теме: Битрикс24 за прокси-сервером