تعذر إنشاء صورة web_only لتثبيت جديد

مرحبًا :blush:

ما زلت أحاول إنشاء خط أنابيب الخاص بنا ليعمل مع Discourse.
لدي حاوية Redis جديدة وحاوية Postgres جديدة لاستخدامهما مع Discourse.
الخطوة التالية بالنسبة لي هي بناء صورة حاوية web_only ثم ربطها وبدء التثبيت إذا كنت محقًا، لكنني غير قادر على تهيئة الحاوية (bootstrap).

أحصل على هذه الرسالة:

فشل
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 4632 exit 1>
موقع الفشل: /pups/lib/pups/exec_command.rb:112:in `spawn'
فشل التنفيذ مع المعاملات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
0e576a9672a887d23579100756224f920ab595b819874b5e7cbe4868f4234481
** فشل التهيئة ** يرجى التمرير للأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من خطأ.
قد يساعد ./discourse-doctor في تشخيص المشكلة.

أنا مشوش بشأن سبب محاولة تنفيذ عمليات الترحيل (migrate) بينما لم أبنِ أي شيء بعد. هل أنا أقوم بالخطوات بشكل خاطئ؟
هذا هو ملف web_only.yml الذي أستخدمه (بسيط جدًا):

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 2
  DISCOURSE_DB_USERNAME: root
  DISCOURSE_DB_PASSWORD: my-secret-pw
  DISCOURSE_DB_HOST: 127.0.0.1
  DISCOURSE_DB_NAME: communities
  DISCOURSE_DEVELOPER_EMAILS: 'email@mail.com'
  DISCOURSE_HOSTNAME: 'localhost'
  DISCOURSE_REDIS_HOST: 127.0.0.1
  SKIP_POST_DEPLOYMENT_MIGRATIONS: 1
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-slack-official.git
          - git clone https://github.com/discourse/discourse-assign.git
run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
        - bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
        - bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
        - sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf

هل أحتاج إلى وجود حاوية Postgres وحاوية Redis قيد التشغيل في كل مرة أحتاج فيها إلى تهيئة البناء؟ كنت أظن أنني أستطيع تحضير الصور لرفعها بنفسي ثم إعادة تشغيل بيئاتي بها دون الحاجة إلى فعل أي شيء بقاعدة بياناتي…

خط الأنابيب الذي طُلب مني بنائه هو:

  • GitHub Actions: يمكنه تهيئة الصورة في حال الحاجة إلى تحديث.
    • دفع الصورة إلى سجل خاص (private registry).
  • بعد ذلك، يمكن لعملي Kubernetes الحصول على التحديثات ونشرها في بيئاتي، من التطوير إلى الإنتاج.

شكرًا مرة أخرى على كل المساعدة والدعم. :sparkles:

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

إعجابَين (2)

شكرًا على ردك :slight_smile:
هل يمكنك إخباري بكيفية تجنب/تخطي ترحيل قاعدة البيانات، من فضلك؟ ظننت أنه يتم عبر SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

لا أستطيع. أنصحك بإنشاء قاعدة بيانات مؤقتة تقوم بتدميرها بعد عملية الترحيل.

وعندما تفعل ذلك، ستحتاج إلى التأكد من حدوث جميع تلك الأمور عند نشر الصورة الجديدة.

المشكلة هي أنني لا أفهم سبب حدوث ترحيل لقاعدة البيانات بينما لا يوجد شيء لترحيله، لأنني أقوم بإنشاء صورتي الأولى لتثبيت جديد :worried:

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

الهجرة مصطلح تقني يُستخدم في سياق إطار عمل Rails. تقوم الهجرات بإنشاء هيكل قاعدة البيانات الصحيح بشكل أساسي.

إعجابَين (2)

لا يمكن تشغيل Discourse إذا لم يتم ملء قاعدة البيانات بالجداول والبيانات المطلوبة. كما أنه يحتاج إلى تجميع الأصول مسبقًا. ستحتاج إلى فهم كيفية عمل هذه العناصر إذا كنت تنوي محاولة النشر بطريقة أخرى.

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

شكرًا لتوضيح الأمر لي. كنت أظن أن هيكل قاعدة البيانات الأول يمكن إنشاؤه عند إطلاق المنتدى لأول مرة.

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

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

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

سأحاول إقناع فريقي بطلب قاعدة بيانات PostgreSQL مؤقتة خلال خط أنابيب GitHub، شكرًا جزيلاً لك على كل المساعدة

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