أقوم بإنشاء مثيل discourse جديد من الصفر لأغراض التطوير وأرى خطأ التمهيد هذا مرة أخرى:
فشل
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' فشل مع العودة #<Process::Status: pid 1002 exit 1>
مكان الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
فشل التنفيذ مع المعلمات {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
فشل التمهيد برمز خروج 1
إعداد الحاوية يتم مع حاويتين لـ webonly و dataonly (redis) مع قاعدة بيانات postgresql خارجية. التعليق على إعدادات maxmind لا يغير شيئًا.
حسناً، لا، لدينا 4 جيجابايت من ذاكرة الوصول العشوائي والكثير من مساحة القرص الصلب (2 × 32 جيجابايت)، والبيئة العامة هي نفسها مثل جهاز دوكر الآخر حيث تعمل عمليات البناء دون مشاكل.
حسنًا، لقد أصلحت فصل web_only و redis. رسالة الخطأ الآن هي:
FAILED -------------------- Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 981 exit 1> Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn' exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migra te'"]} 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. 801049b69a89d38b1ae5c299d356fc5f8dc6a8f518b1260c2dde05e0b6081556
ولكن ربما يكون هناك سوء فهم / نقص في المعرفة من جانبي:
يجب أن تكون قاعدة البيانات خارجية في حاوية lxc أخرى تحتوي على قاعدة بيانات postgresql. المستخدم وقاعدة البيانات موجودان، لكن قاعدة البيانات فارغة قبل أول عملية bootstrap لـ web_only. هل يقوم البرنامج النصي بإنشاء قاعدة البيانات بنفسه على النظام البعيد عند أول بناء؟ أم يجب علي أولاً إنشاء حاوية قاعدة البيانات ثم تصدير مخططها الافتراضي والبيانات يدويًا إلى خادم postgresql الخارجي؟
شكراً على الرسم البياني. هذا إعداد متطور للغاية - ستقوم بذلك إذا كان لديك سبب وجيه وتعرف المنطقة.
إذا كنت لا تزال ترى ما يلي، أعتقد أن هذا هو مؤشر على الخطأ. لا يمكن لـ Redis فتح المنفذ الذي يحتاج إلى الاستماع إليه.
إذن، الأسئلة تدور حول ما إذا كان يجب على Redis القيام بذلك، في هذه الحاوية، وإذا كان الأمر كذلك، فأين يعمل Redis آخر على الجهاز. قد تكون أداة lsof أداة مفيدة هنا.
مرحباً @Ed_S
شكراً على التلميح بشأن المنفذ المفقود. أريد أولاً انتظار رد فالكو بخصوص أسئلتي حول الإعداد العام لـ discourse مع قاعدة بيانات postgres خارجية.
نعم، الإعداد معقد بعض الشيء مقارنة بالإعداد القياسي الذي يحتوي على حاوية تطبيق واحدة فقط. أقوم بتشغيل كل شيء على جهاز فعلي مخصص مع Proxmox (https://p.roxmox.com) كبيئة افتراضية في hetzner.de
لا يزال يتعين عليك مشاركة السجلات الكاملة، بما في ذلك الجزء الذي فشل فيه الترحيل. تخميني (وهو مجرد تخمين بما أنك لم تشارك الخطأ) هو أنك تستخدم المكون الإضافي للذكاء الاصطناعي وقاعدة بياناتك لا تحتوي على الوظيفة الإضافية المطلوبة.
الملف من /samples/web_only.yml يحتوي على # استخدم مفتاح 'links' لربط الحاويات معًا، أي استخدم علامة Docker --link. links: - link: name: data alias: data
في حالتي، حاوية البيانات هي حاوية redis
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a27999b28a90 local_discourse/redis \"/sbin/boot\" 2 days ago Up 20 hours
أعتقد الآن أن النهج الأفضل سيكون إنشاء إعداد قياسي “متكامل” أولاً (app.yml). ثم تفريغ مخطط وقاعدة البيانات الأولية من الحاوية إلى جهاز postgres خارجي. @Falco ما رأيك؟