Sidekiq не работает. Сбой теста Sidekiq heartbeat, перезапуск

Интересует, можно ли решить эту проблему, очистив Redis или обновив его; с ним ничего не делали уже более 8 месяцев. Лично я ранее не работал с Redis, но наш экземпляр Tests-Pass Discourse был настроен с использованием local_discourse, а не Discourse Docker, который сейчас рекомендуется на этом форуме. Проблемы, с которыми я столкнулся, связаны с тем, что письма не отправляются пользователям. Любая помощь и предложения будут очень кстати!

Sidekiq не запущен. Многие задачи, например отправка писем, выполняются асинхронно через sidekiq. Убедитесь, что хотя бы один процесс sidekiq запущен.

Тест heartbeat Sidekiq не удался, выполняется перезапуск

config/unicorn.conf.rb:147:in `check_sidekiq_heartbeat
config/unicorn.conf.rb:164:in `master_sleep'
unicorn-5.5.4/lib/unicorn/http_server.rb:296:in `join'
unicorn-5.5.4/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

Если миграция имеет смысл, я открыт к предложениям.

Я рекомендую сделать резервную копию вашей текущей установки и создать новую, следуя официальной стандартной инструкции по установке Discourse

Это рекомендация действует уже как минимум последние 4 года.

Я поддержу предложение Рафаэля.

Поможет ли мне использование launcher для пересборки или перезапуска контейнера redis?

Использование: launcher КОМАНДА КОНФИГ [–skip-prereqs] [–docker-args СТРОКА]
Команды:
start: Запуск/инициализация контейнера
stop: Остановка работающего контейнера
restart: Перезапуск контейнера
destroy: Остановка и удаление контейнера
enter: Открыть оболочку для выполнения команд внутри контейнера
logs: Просмотр логов Docker для контейнера
bootstrap: Инициализация контейнера для конфигурации на основе шаблона
run: Выполнение заданной команды с конфигурацией в контексте последнего образа, созданного через bootstrap
rebuild: Пересборка контейнера (удаление старого, bootstrap, запуск нового)
cleanup: Удаление всех контейнеров, которые остановлены более 24 часов
start-cmd: Генерация команды Docker, используемой для запуска контейнера

Опции:
–skip-prereqs Не проверять предварительные требования launcher
–docker-args Дополнительные аргументы для передачи при запуске docker
–skip-mac-address Не назначать MAC-адрес
–run-image Переопределить образ, используемый для запуска контейнера

Вы устанавливали по официальному руководству стандартной установки Discourse или каким-то другим способом? Если у вас стандартная установка, то да, выполнение команды ./launcher rebuild app, скорее всего, решит вашу проблему.

Пока нет, но мы уже назначаем время для миграции. Наш Discourse работает уже почти три года, и я просто не хочу добавлять лишнее время простоя. :slight_smile: Наш экземпляр полностью поддерживается волонтёрами, поэтому в последний месяц я учусь поддерживать его самостоятельно. Если быстрое исправление для Redis поможет (этот контейнер работал год без изменений), я бы хотел его применить.

Если изначально у вас не была выполнена стандартная установка, то предположить, что может решить вашу текущую проблему, практически невозможно.

Я бы создал новую виртуальную машину (VM) и выполнил там тестовую установку, чтобы убедиться, что всё работает. При переносе можно перевести старый форум в режим только для чтения, создать резервную копию, восстановить её на новой виртуальной машине и изменить DNS-записи с минимальным временем простоя. (На самом деле потребуется небольшое время, так как после изменения DNS нужно будет пересобрать систему для установки сертификата Let’s Encrypt).

Спасибо. Let’s Encrypt на самом деле должен быть довольно простым, так как его настройка сводится к простому редактированию обратного прокси-сервера nginx. Рад это слышать, и ожидаем, что будет некоторое время простоя. Нужно просто запланировать это на нерабочее время.

Я собираюсь выполнить миграцию и восстановить резервную копию в официальные образы. Подскажите, пожалуйста, есть ли что-то важное, что нужно знать об очистке сохранённых писем и т.п., чтобы не заспамить пользователей после того, как Sidekiq и другие сервисы заработают корректно. Спасибо!

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

Итак, пытаемся следовать документации по установке официальных образов Docker для Discourse, но столкнулись с проблемами. Мы пришли к выводу, что нам не хватает контейнеров redis, mail-receiver и data, которые у нас ранее были в Docker.

Кажется, наша предыдущая установка включала:
app.yml
data.yml
mail-receiver.yml
redis.yml

Эта многоконтейнерная конфигурация отличается от инструкций по базовой установке. У меня есть резервная копия старого каталога /var/discourse для справки.

FAILED                                                                                                                                                        │················································································································
--------------------                                                                                                                                          │················································································································
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 645 exit 1>                 │················································································································
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'                                                                                            │················································································································
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}                                   │················································································································
bbf0e57ac69f1febe2a5f149aa7e6e12541c3c23aaf199188fdf19d507254b58                                                                                              │················································································································
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.                                                   │················································································································
./discourse-doctor may help diagnose the problem.

Похоже, мы пропустили шаг ./launcher bootstrap data
./launcher start redis

[Mon 11 May 2020 12:53:20 AM UTC] Выполнение команды перезагрузки: sv reload nginx                                                                                             │················································································································
fail: nginx: runsv не запущен                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:20 AM UTC] Ошибка перезагрузки для :                                                                                                          │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Домены не изменены.                                                                                                        │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Пропущено, следующее время обновления: Thu 09 Jul 2020 11:33:04 PM UTC                                                                 │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Добавьте '--force', чтобы принудительно выполнить обновление.                                                                                            │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Установка ключа в:/shared/ssl/discuss.noisebridge.info_ecc.key                                                              │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Установка полного цепочного сертификата в:/shared/ssl/discuss.noisebridge.info_ecc.cer                                                       │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Выполнение команды перезагрузки: sv reload nginx                                                                                             │················································································································
fail: nginx: runsv не запущен                                                                                                                                │················································································································
[Mon 11 May 2020 12:53:21 AM UTC] Ошибка перезагрузки для :                                                                                                          │················································································································
run-parts: выполнение /etc/runit/1.d/remove-old-socket                                                                                                         │················································································································
Запущен runsvdir, PID = 626                                                                                                                                  │················································································································
ok: run: redis: (pid 636) 0s                                                                                                                                  │················································································································
chgrp: недопустимая группа: 'syslog'                                                                                                                                │················································································································
ok: run: postgres: (pid 639) 0s                                                                                                                               │················································································································
rsyslogd: imklog: не удалось открыть лог ядра (/proc/kmsg): операция не разрешена.                                                                               │················································································································
rsyslogd: сбой активации модуля imklog [v8.1901.0 см. https://www.rsyslog.com/e/2145 ]                                                                  │················································································································
supervisor pid: 640 unicorn pid: 667

Отлично, мы успешно восстановили наш предыдущий экземпляр Discourse! Сейчас отображается:

Все исходящие письма были глобально отключены администратором. Уведомления по электронной почте любого рода отправляться не будут.

Это верно, импортеры установили это, чтобы вы не отправили 50 000 писем сразу после миграции. Включайте рассылку по электронной почте в настройках вашего сайта осторожно.