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

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

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

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

Ошибка с функцией 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 за прокси-сервером

10 комментариев к “Bitrix24 не работает push”

  1. А есть способ установки новой Node.js? сейчас уже 12, у меня на виртуальной машине версия 8 и вот совсем не понимаю как обновляться 🙁

    Ответить
    • Да, установить необходимую версию можно следующим способом:
      1. Обновляемся:
      yum update -y
      2. Ставим пакеты:
      yum install -y gcc-c++ make
      3. Скачиваем и запускаем скрипт (для 12 версии):
      curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash –
      4. Устанавливаем node:
      yum install nodejs -y

      Предварительно удалив предыдущую версию. При этом надо понимать, что не известно, корректно ли окружение будет работать с 12 версией.

      Ответить
  2. Добрый человек! А если у меня на Виртуальной машине стоит, то этих папок нету:
    /opt/push-server/lib/storages/
    Помогите (

    Ответить
    • Возможно, изменена структура каталогов. Можно поискать эти функции так: grep padStart -r /opt/push-server/
      Если же отсутствует директория /opt/push-server/, то скорее всего не установлен push-сервер. Тогда вам поможет вот этот курс. Только сделайте бэкап вм перед работами.

      Ответить
  3. Не помогло. Ошибка: “2021-04-20 07:56:56.770 uncaughtException: listen EADDRNOTAVAIL: address not available 89.223.95.195:9011 {“date”:”Tue Apr 20 2021 10:56:56 GMT+0300 (Eastern European Summer Time)”,”process”:{“pid”:770,”uid”:600,”gid”:600,”cwd”:”/opt/push-server”,”execPath”:”/usr/bin/node”,”version”:”v10.24.1″,”argv”:[“/usr/bin/node”,”/opt/push-server/server.js”,”–config”,”/etc/push-server/push-server-pub-9011.json”],”memoryUsage”:{“rss”:40824832,”heapTotal”:31703040,”heapUsed”:14837800,”external”:447523}},”os”:{“loadavg”:[0.880859375,0.1826171875,0.05908203125],”uptime”:6},”trace”:[{“column”:19,”file”:”net.js”,”function”:”Server.setupListenHandle [as _listen2]”,”line”:1263,”method”:”setupListenHandle [as _listen2]”,”native”:false},{“column”:12,”file”:”net.js”,”function”:”listenInCluster”,”line”:1328,”method”:null,”native”:false},{“column”:7,”file”:”net.js”,”function”:”doListen”,”line”:1461,”method”:null,”native”:false},{“column”:19,”file”:”internal/process/next_tick.js”,”function”:”process._tickCallback”,”line”:63,”method”:”_tickCallback”,”native”:false},{“column”:11,”file”:”internal/modules/cjs/loader.js”,”function”:”Module.runMain”,”line”:834,”method”:”runMain”,”native”:false},{“column”:19,”file”:”internal/bootstrap/node.js”,”function”:”startup”,”line”:283,”method”:null,”native”:false},{“column”:3,”file”:”internal/bootstrap/node.js”,”function”:”bootstrapNodeJSCore”,”line”:623,”method”:null,”native”:false}],”stack”:[“Error: listen EADDRNOTAVAIL: address not available 89.223.95.195:9011″,” at Server.setupListenHandle [as _listen2] (net.js:1263:19)”,” at listenInCluster (net.js:1328:12)”,” at doListen (net.js:1461:7)”,” at process._tickCallback (internal/process/next_tick.js:63:19)”,” at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)”,” at startup (internal/bootstrap/node.js:283:19)”,” at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)”]}

    Ответить
    • У Вас ошибка отличная от той, которая рассматривается в данной статье: address not available 89.223.95.195:9011.
      Необходимо проверять, по какой причине не работает push сервер.

      Ответить

Оставьте комментарий