배포 실패 - exec_command.rb:117:in `spawn

안녕하세요.
긴 로그로 여기가 지저분해지기 전에 아래에 붙여넣어 두었습니다.
배포가 항상 이렇게 실패합니다. 문제가 무엇인지, 어떻게 수정해야 하는지에 대한 제안을 공유해 주시면 감사하겠습니다.
…

I, [2023-06-20T14:08:40.997134 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-06-20T14:08:43.104608 #1]  INFO -- : docker_manager is already at latest compatible version

I, [2023-06-20T14:08:43.104825 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Redis::CommandError: READONLY You can't write against a read only replica. script: bcec1d9b3bbcfb089dc0b7316771be9f011872b6, on @user_script:8.
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis/client.rb:162:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis.rb:270:in `block in send_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis.rb:269:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis.rb:269:in `send_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis/commands/scripting.rb:110:in `_eval'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/redis-4.8.1/lib/redis/commands/scripting.rb:97:in `evalsha'
/var/www/discourse/lib/discourse_redis.rb:273:in `eval'
/var/www/discourse/lib/distributed_mutex.rb:82:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:50:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/lib/tasks/db.rake:221:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
I, [2023-06-20T14:08:45.555646 #1]  INFO -- : 


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 687 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** 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.

아, 그게 Redis였군요. 초보라 시간이 좀 걸렸죠 - 맞나요?
그렇다면, Discourse 인스턴스에 대해 말씀하시는 거라면, 이를 "스탠바이 리플리카"라고 부를 수 있도록 배포하는 방법은 무엇일까요?

이것은 표준 설치인지, 개발용 설치인지, 아니면 다른 것인가요? 직접 redis를 만들었나요? 표준 설치의 경우 redis는 컨테이너에 포함되어 있어 자동으로 작동해야 합니다.

안녕하세요.
제가 언급하지 않았던 부분은, 제가 시도하는 것이 비일상적인 구성이 아니라고 전제하고 있고 지금도 그렇게 생각하고 있다는 것입니다. 즉, Redis와 pgSQL 모두 Discourse 컨테이너 외부에 위치해 있다는 뜻입니다.
Redis와 동일하거나 유사한 방식으로 Discourse를 ‘스탠바이’ 상태로 보다 표준적인 방법으로 배포할 수 있는지, 그렇게 하면 해당 컨테이너의 인스턴스화/배포가 실패하지 않을 수 있는지 궁금합니다.

네, 하지만 Redis 서버 디버깅은 직접 진행하셔야 합니다.

에러는 다음과 같습니다.

You can't write against a read only replica 

리플리카를 생성한 것으로 보이며, 주 노드(main)에 데이터를 기록해야 합니다. 페일오버를 시도하고 있다면, 리플리카를 활성 상태로 전환하고 더 이상 리플리카로 동작하지 않도록 하는 방법을 찾아야 합니다.

해당 부분은 다른 곳에서 도움을 받으셔야 합니다.

네. 하지만 지금 제가 겪고 있는 문제는 페일오버가 아닙니다. 아직은요.
여기서는 Redis와 pgSQL이 모두 읽기 전용 리플리카인 상태에서, 별도의 다른 노드/시스템에 이러한 “스탠바이/세컨더리” Discourse 컨테이너를 인스턴스화하려는 것입니다. 어떻게 해야 할까요?

에러 메시지는 명확하며, 제게는 매우 명백한 질문이지만 — Discourse를 처음 다루어보는 터라 — 이러한 “핫 스탠바이” 컨테이너를 배포하고 실행하는 것이 가능한지, 가능하다면 어떻게 해야 하는지 궁금합니다.

Discourse가 primary를 사용하도록 설정해야 합니다. primary가 실패하면 dns 또는 haproxy를 사용하여 secondary로 전환할 수 있습니다.

이것은 Discourse의 문제가 아닙니다. redis와 postgres를 관리하는 방법과 고가용성(HA) 구성에 대해 배우려면 다른 곳에서 검색해야 합니다.