デプロイに失敗しました - 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.
「いいね!」 1

ああ、それはRedisですね。初心者だったので時間がかかりましたね。
しかし、もしそうなら、「スタンバイレプリカ」と呼べるようなデプロイ方法はどうすればよいでしょうか?はい、そのようなDiscourseインスタンスのことです。

これは標準インストールですか、それとも開発インストールですか、あるいはそれ以外ですか?Redisは自作しましたか?標準インストールの場合、Redisはコンテナ内にあり、すぐに動作するはずです。

「いいね!」 1

こんにちは。
言及しませんでしたが、私が試みていることは珍しいことではなく、RedisとpgSQLの両方がDiscourseコンテナの外部にあると現在も推測しています。
Redisと同様の方法で、Discourseを「スタンバイ」として、より標準的な方法でデプロイすることは可能ですか?そうすれば、そのようなコンテナのインスタンス化/デプロイが失敗することはありませんか?

「いいね!」 1

はい、ただし、Redisサーバーのデバッグはご自身で行う必要があります。

エラーは次のとおりです。

読み取り専用レプリカに対して書き込むことはできません

レプリカを作成し、メインのレプリカに書き込む必要があるようです。フェイルオーバーを試みている場合は、レプリカをアクティブにする方法を見つけて、レプリカであることを停止する必要があります。

それ以外のヘルプは、他の場所で得る必要があります。

はい。しかし、フェイルオーバーは私がここで抱えている問題ではありません。まだです。
ここで、RedisとpgSQLの両方が読み取り専用レプリカである別の独立したノード/システムに、そのような「スタンバイ/セカンダリ」Discourseコンテナをインスタンス化しようとしています。どうすればよいですか?

エラーは自己説明的であり、明白な質問は、Discourseに初めて触れる私にとって、そのような「ホットスタンバイ」コンテナをデプロイして実行するにはどうすればよいか、そもそも可能かどうかということです。

プライマリでディスコースを使用する必要があります。失敗した場合は、セカンダリに切り替えるためにDNSまたはHAProxyを使用します。

これはディスコースの問題ではありません。高可用性セットアップでRedisとPostgresを管理する方法を学びたい場合は、他の場所で検索する必要があります。