فشل النشر - 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.
هل من الممكن نشر Discourse بطريقة قياسية أكثر أو أقل كـ “احتياطي” - بنفس الطريقة أو بطريقة مشابهة لـ Redis - بحيث لا يفشل إنشاء/نشر هذه الحاوية؟

إعجاب واحد (1)

نعم، ولكن ستحتاج إلى تصحيح خادم redis الخاص بك بنفسك.

الخطأ هو

لا يمكنك الكتابة مقابل نسخة للقراءة فقط

يبدو أنك أنشأت نسخة وتحتاج إلى الكتابة إلى النسخة الرئيسية. إذا كنت تحاول تجاوز الفشل، فستحتاج إلى معرفة كيفية تحويل النسخة إلى نسخة نشطة والتوقف عن كونها نسخة.

ستحتاج إلى الحصول على هذه المساعدة من مكان آخر.

نعم. لكن تجاوز الفشل ليس المشكلة التي أواجهها هنا، ليس بعد.
هنا أحاول إنشاء حاوية “احتياطية/ثانوية” من ديسكورس على عقدة/نظام مختلف ومنفصل، حيث يكون كل من Redis و pgSQL عبارة عن نسخ طبق الأصل للقراءة فقط - كيف يمكنني فعل ذلك؟

الخطأ يشرح نفسه بنفسه والسؤال الواضح هو - بالنسبة لي، نظرًا لأن هذه هي أول تجربة لي مع ديسكورس - كيف يمكن نشر وتشغيل حاوية “احتياطية ساخنة” كهذه، إذا كان ذلك ممكنًا على الإطلاق.

ستحتاج إلى جعل discourse يستخدم الأساسي. عندما يفشل، ستستخدم dns أو haproxy للتبديل إلى الثانوي.

هذه ليست مشكلة Discourse. إذا كنت ترغب في معرفة كيفية إدارة إعداد عالي التوفر لـ redis و postgres، فستحتاج إلى البحث في مكان آخر.