У меня несколько лет работал небольшой форум на Discourse, и всё было отлично. Я настроил автоматические резервные копии, но давно не обновлял версию Discourse.
Сервер перестал работать, но у меня есть резервная копия. Она сделана с очень старой версии Discourse, примерно двухлетней давности. Когда я пытаюсь установить новейшую версию и восстановить из резервной копии, это не работает. Когда я пытаюсь установить старую версию, это тоже невозможно: скрипт настройки автоматически подтягивает новые коммиты и последний образ Docker. Я даже нашёл эти строки в скрипте запуска и удалил их, но какой-то внутренний код внутри образа Docker также проверяет и обновляет Git до последней версии.
Что мне делать? Как можно запустить старую версию Discourse или восстановить старую резервную копию на новой версии?
Если вы хотите получить помощь, вам нужно быть более конкретным. Это должно работать. Есть большая вероятность, что проблема также возникнет, если бы вы смогли установить ту же версию Discourse, которая у вас была тогда.
Какую ошибку вы получили при попытке восстановления?
В выводе ./launcher logs app нет критических ошибок, но форум не работает. Почти все кнопки не функционируют, тем нет, а HTML выглядит странно (страница с ошибкой запуска повторяется, и её можно бесконечно прокручивать вниз).
Я не профессиональный технарь и надеюсь, что вы подскажете, какие логи я могу добавить в свой отчёт и где их найти.
В настоящее время я не могу получить доступ к данным форума, даже при наличии резервной копии. Отображаются только логотип форума и теги, а все кнопки неактивны.
И закомментируйте неработающий плагин, а также, возможно, любые другие установленные у вас плагины. Вы сможете добавить их обратно, когда всё заработает.
В логах production Rails отсутствуют критические ошибки, файл product_errors.log пуст.
Логи ошибок UnicornНеизвестный OID 17246: не удалось распознать тип 'embeddings'. Он будет обработан как String.
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 2 EOFError подписка не удалась, повторное подключение через 1 секунду. Стек вызовов /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:103:in `rescue in read'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:94:in `read'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:535:in `next_event'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:66:in `subscription'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/subscribe.rb:17:in `subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:175:in `_subscription'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/pubsub.rb:17:in `subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:293:in `global_subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread'
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Ошибка получения задания: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Ошибка получения задания: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Ошибка получения задания: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Ошибка получения задания: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Ошибка получения задания: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 heartbeat: Connection refused - connect(2) for 127.0.0.1:6379
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Исключение задания: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) sidekiq-exception
Не удалось сообщить об ошибке: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 2 Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) подписка не удалась, повторное подключение через 1 секунду. Стек вызовов /usr/local/lib/ruby/3.3.0/socket.rb:1219:in `__connect_nonblock'
/usr/local/lib/ruby/3.3.0/socket.rb:1219:in `connect_nonblock'
/usr/local/lib/ruby/3.3.0/socket.rb:60:in `connect_internal'
/usr/local/lib/ruby/3.3.0/socket.rb:141:in `connect'
/usr/local/lib/ruby/3.3.0/socket.rb:647:in `block in tcp'
/usr/local/lib/ruby/3.3.0/socket.rb:231:in `each'
/usr/local/lib/ruby/3.3.0/socket.rb:231:in `foreach'
/usr/local/lib/ruby/3.3.0/socket.rb:637:in `tcp'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/ruby_connection.rb:120:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/connection_mixin.rb:11:in `reconnect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:769:in `block in connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client/middlewares.rb:12:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:768:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:759:in `raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:719:in `ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-client-0.25.2/lib/redis_client.rb:314:in `call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/client.rb:90:in `call_v'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:152:in `block in send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis.rb:151:in `send_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-5.4.0/lib/redis/commands/strings.rb:191:in `get'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:366:in `process_global_backlog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:279:in `block in global_subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/backends/redis.rb:291:in `global_subscribe'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:769:in `global_subscribe_thread'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus.rb:740:in `block in new_subscriber_thread'
Неизвестный OID 17246: не удалось распознать тип 'embeddings'. Он будет обработан как String.
Логи Sidekiq пусты.
В логах Nginx проблем не обнаружено.
В логах Unicorn я вижу проблему с подключением к Redis, но в самих логах Redis ошибок нет:
9706:C 28 Aug 2025 15:11:25.025 * Fork CoW для RDB: текущее 1 МБ, пиковое 1 МБ, среднее 0 МБ
881:M 28 Aug 2025 15:11:25.106 * Фоновое сохранение завершено успешно
881:M 28 Aug 2025 15:16:26.096 * 100 изменений за 300 секунд. Сохранение...
881:M 28 Aug 2025 15:16:26.097 * Фоновое сохранение запущено процессом 10037
10037:C 28 Aug 2025 15:16:26.109 * База данных сохранена на диск
10037:C 28 Aug 2025 15:16:26.109 * Fork CoW для RDB: текущее 1 МБ, пиковое 1 МБ, среднее 0 МБ
881:M 28 Aug 2025 15:16:26.198 * Фоновое сохранение завершено успешно
881:M 28 Aug 2025 15:21:27.004 * 100 изменений за 300 секунд. Сохранение...
881:M 28 Aug 2025 15:21:27.004 * Фоновое сохранение запущено процессом 10365
10365:C 28 Aug 2025 15:21:27.019 * База данных сохранена на диск
10365:C 28 Aug 2025 15:21:27.019 * Fork CoW для RDB: текущее 1 МБ, пиковое 1 МБ, среднее 0 МБ
881:M 28 Aug 2025 15:21:27.105 * Фоновое сохранение завершено успешно
881:M 28 Aug 2025 15:26:28.030 * 100 изменений за 300 секунд. Сохранение...
881:M 28 Aug 2025 15:26:28.031 * Фоновое сохранение запущено процессом 10703
10703:C 28 Aug 2025 15:26:28.050 * База данных сохранена на диск
10703:C 28 Aug 2025 15:26:28.051 * Fork CoW для RDB: текущее 1 МБ, пиковое 1 МБ, среднее 0 МБ
881:M 28 Aug 2025 15:26:28.132 * Фоновое сохранение завершено успешно
881:M 28 Aug 2025 15:31:29.094 * 100 изменений за 300 секунд. Сохранение...
881:M 28 Aug 2025 15:31:29.095 * Фоновое сохранение запущено процессом 11028
11028:C 28 Aug 2025 15:31:29.109 * База данных сохранена на диск
11028:C 28 Aug 2025 15:31:29.110 * Fork CoW для RDB: текущее 1 МБ, пиковое 1 МБ, среднее 0 МБ
881:M 28 Aug 2025 15:31:29.196 * Фоновое сохранение завершено успешно
Спасибо, помогло, и форум работает (не совсем корректно, но я могу открывать темы с контентом).
Однако форум без безопасного режима неработоспособен, а я точно не помню, какие плагины установил. Список плагинов должен быть в app.yml, но сервер не работает, и у меня есть только резервная копия, которая, насколько я знаю, не содержит app.yml. Что мне сделать, чтобы восстановить форум и удалить неработающие плагины?
Восстановление без использования существующего app.yml не должно устанавливать никаких плагинов, кроме встроенных (все они являются официальными).
Однако темы и компоненты тем включены в резервную копию, поэтому попробуйте их отключить.
Вы также можете попробовать использовать безопасный режим и отключить только темы и компоненты, чтобы убедиться, что ваши проблемы вызваны одним из них.
Спасибо, это действительно работает только без тем, но где я могу найти темы? В резервной копии я вижу только два элемента: dump.sql.gz и папку uploads, которая содержит только медиафайлы и файлы пользователей.