Очистка Redis

Делюсь этим на случай, если это поможет кому-то ещё, кто видит «Обновление» в панели администратора, хотя на самом деле обновление не идёт, а форум при этом выглядит исправным.

Хотя это никогда не влияло на обновления через Docker Manager, в последних нескольких версиях мне приходилось выполнять обновления через CLI, так как панель администратора постоянно показывала, что Discourse обновляется.

Мой форум небольшой, без пользовательских плагинов.

Решением для устранения проблемы стала очистка кэша Redis.

Хотя я не могу раскрыть первопричину, было крайне неприятно упереться в предел своих знаний и понимания процесса обновления Discourse (это не жалоба, а признание).

До этого момента пересборка приложения всегда была надёжным решением практически для любой проблемы.

Redis также хранит пользовательские сессии и многое другое. Полная очистка Redis приведёт к выходу всех пользователей из системы и удалению всех ожидающих заданий Sidekiq. Запланированные задания вернутся только после следующего перезапуска.

Это должно быть крайней мерой, и даже в этом случае я рекомендую определить, какие именно ключи являются причиной проблемы, вместо выполнения команды flushall. Это всё равно что поджечь целое здание, чтобы избавиться от мыши.

Можно ли вместо этого перезапустить Redis? Я полагаю, что это база данных в оперативной памяти, поэтому при перезагрузке сервера ничего не сохранится. А перезагрузка сервера не является разрушительной (и может произойти в любой момент).

Это неверно. Redis сохраняет данные на диск.

Я ценю ваши знания и опыт.

Что я пробовал:

Обновление через панель администратора (не удалось/не началось)

Следовал инструкциям по ручному обновлению Discourse (за последние 3 выпуска)

Выполнял несколько пересборок приложения-лаунчера.

Искал на форуме похожие проблемы и решения.

В итоге обратился к ChatGPT, который выявил варианты настройки Redis, хотя сам ChatGPT назвал это маловероятным решением (и предложил те же шаги, которые я уже пробовал).

Именно это действие помогло решить проблему.

Я понимаю эту аналогию.

Что ещё я мог бы сделать, чтобы лучше понять и решить проблему альтернативным способом?

Чтобы прояснить: вы обнаружили, что

cd /var/discourse
git pull
./launcher rebuild app

не сработало для вас? (В чём именно оно не сработало? Это стандартная установка?)

Не выполнялось обновление через git pull, но была выполнена пересборка лаунчера.

Этот процесс прошёл успешно, просто в админ-панели так и не было снято состояние, что обновление находится в процессе.

Спасибо — значит, проблема в том, что обновление панели администратора не работает у вас. Кстати, у меня оно тоже не работает уже какое-то время! Было бы лучше, если бы оно работало.

Я предпочитаю обновление через командную строку, но на этот раз я обновил Docker и Discourse через интерфейс на iPhone 15, и всё прошло довольно гладко (стандартная установка на DO).

Обычно я делаю всё через CLI на одном из своих компьютеров, так как в прошлый раз, когда я пробовал через интерфейс (несколько месяцев назад), у меня не получилось, и всё равно пришлось подключаться по SSH.

Что возвращает команда free -h?

Чему установлено значение UNICORN_WORKERS в файле app.yml?

Чему установлено значение db_shared_buffers в файле app.yml?

Закомментирован ли параметр db_work_mem в файле app.yml?

Сколько (виртуальных) процессоров имеет ваш сервер?

Команда free -h показывает 3,8 ГиБ памяти: 1,7 ГиБ используется, 134 МиБ свободно, 1,0 ГиБ общий объём, buff/cache 2,0 ГиБ, доступно 788 МиБ.

Своп: 2,0 ГиБ всего, 290 МиБ используется, 1,7 ГиБ свободно.

UNICORN_WORKERS: 4

db_shared_buffers: 1 ГБ

db_work_mem закомментирован, установлен на 40 МБ.

Я использую экземпляр с 2 виртуальными процессорами и 4 ГБ оперативной памяти.

Спасибо за вопросы! :smiley: