수년간 작은 디스코르스(Discourse) 포럼을 운영해 왔는데, 잘 작동하고 있었습니다. 자동 백업을 설정해 두었지만, 디스코르스 버전을 오랫동안 업데이트하지 않았습니다.
서버가 죽었지만 백업은 가지고 있습니다. 백업은 약 2년 전의 구버전 디스코르스에서 만든 것입니다. 최신 버전을 설치하고 백업에서 복원하려고 하면 작동하지 않습니다. 구버전을 설치하려고 하면 불가능합니다. 설치 스크립트가 자동으로 새로운 커밋과 최신 Docker 이미지를 가져오기 때문이죠. 저는 런처 스크립트에서 해당 줄을 찾아서 삭제하기도 했지만, Docker 이미지 내부의 코드도 Git을 최신 버전으로 확인하고 업데이트하는 것 같습니다.
어떻게 해야 할까요? 구버전 디스코르스를 실행하거나, 새 버전에서 구버전 백업을 복원하는 방법이 있을까요?
Rails 프로덕션 로그에는 치명적인 오류가 없고, product_errors.log 파일은 비어 있습니다.
Unicorn 오류 로그 unknown OID 17246: failed to recognize type of 'embeddings'. It will be treated as String.
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 2 EOFError subscribe failed, reconnecting in 1 second. Call stack /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'
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Error fetching job: Connection refused - connect(2) for 127.0.0.1:6379
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 sidekiq-exception
Failed to report error: 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
Failed to report error: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) 3 Job exception: Connection refused - connect(2) for 127.0.0.1:6379 (redis://localhost:6379) sidekiq-exception
Failed to report error: 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) subscribe failed, reconnecting in 1 second. Call stack /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'
unknown OID 17246: failed to recognize type of 'embeddings'. It will be treated as String.
Sidekiq 로그는 비어 있습니다.
Nginx 로그에는 문제가 없습니다.
Unicorn 로그에서 Redis 연결 문제를 발견했지만, Redis 로그 자체에는 오류가 없습니다:
9706:C 28 Aug 2025 15:11:25.025 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
881:M 28 Aug 2025 15:11:25.106 * Background saving terminated with success
881:M 28 Aug 2025 15:16:26.096 * 100 changes in 300 seconds. Saving...
881:M 28 Aug 2025 15:16:26.097 * Background saving started by pid 10037
10037:C 28 Aug 2025 15:16:26.109 * DB saved on disk
10037:C 28 Aug 2025 15:16:26.109 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
881:M 28 Aug 2025 15:16:26.198 * Background saving terminated with success
881:M 28 Aug 2025 15:21:27.004 * 100 changes in 300 seconds. Saving...
881:M 28 Aug 2025 15:21:27.004 * Background saving started by pid 10365
10365:C 28 Aug 2025 15:21:27.019 * DB saved on disk
10365:C 28 Aug 2025 15:21:27.019 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
881:M 28 Aug 2025 15:21:27.105 * Background saving terminated with success
881:M 28 Aug 2025 15:26:28.030 * 100 changes in 300 seconds. Saving...
881:M 28 Aug 2025 15:26:28.031 * Background saving started by pid 10703
10703:C 28 Aug 2025 15:26:28.050 * DB saved on disk
10703:C 28 Aug 2025 15:26:28.051 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
881:M 28 Aug 2025 15:26:28.132 * Background saving terminated with success
881:M 28 Aug 2025 15:31:29.094 * 100 changes in 300 seconds. Saving...
881:M 28 Aug 2025 15:31:29.095 * Background saving started by pid 11028
11028:C 28 Aug 2025 15:31:29.109 * DB saved on disk
11028:C 28 Aug 2025 15:31:29.110 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
881:M 28 Aug 2025 15:31:29.196 * Background saving terminated with success
감사합니다. 도움이 되었고 포럼은 작동하고 있습니다(완벽하지는 않지만, 콘텐츠를 포함한 주제에 접근할 수는 있습니다).
그러나 안전 모드 없이 포럼은 사용할 수 없으며, 정확히 어떤 플러그인을 설치했는지 기억이 나지 않습니다. 플러그인 목록은 app.yml 파일에 있어야 하지만, 서버는 죽어 있고 제가 아는 한 백업에는 app.yml 파일이 포함되어 있지 않습니다. 포럼을 복구하고 손상된 플러그인을 제거하려면 어떻게 해야 합니까?