مشاكل في ترحيل قاعدة بيانات الاختبار

شكرًا لك، @Mittineague!

بعد فترة، أصبح الأمر منطقيًا. لقد كتبت حتى مواصفات (spec)، ولكن حتى قبل إضافة مواصفات (spec) الخاصة بي (وعند التراجع إلى ما قبل إضافة أي كود)، تفشل المواصفات (specs) بسبب:

حدث خطأ أثناء تحميل ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb.
خطأ في التنفيذ: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: خطأ: العلاقة "groups" غير موجودة
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass
                              ^
# (eval):24:in `async_exec'
# (eval):24:in `async_exec'
# ./app/models/group.rb:529:in `lookup_group'
# ./app/models/group.rb:513:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:512:in `each_key'
# ./app/models/group.rb:512:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `require'
# ./plugins/discourse-prometheus/spec/middleware/metrics_spec.rb:3:in `<top (required)>'
# ------------------
# --- سبب ذلك: ---
# PG::UndefinedTable:
#   خطأ: العلاقة "groups" غير موجودة
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   (eval):24:in `async_exec'
لم يتم العثور على أمثلة.

يبدو أن هذا يحدث في تقريبًا كل مواصفة (spec) في الموقع. أعتقد أنني قمت بشكل صحيح بـ git reset --hard upstream/master للوصول إلى ما يجب أن يعمل، ثم قمت بحذف قاعدة البيانات وإعادة إنشائها، لكنني ما زلت أحصل على هذا الخطأ.

أقرّ بأنني لستُ الأفضل في قراءة رسائل الخطأ. لقد راجعت الملف الذي ظننتُ أنهم يشيرون إليه، لكنني لم أرَ أي سطر يحتوي على “group(s)”.

إذا كان هذا الملف خاصًا بك، فقد يكون الأمر شيئًا أواجه صعوبة فيه أحيانًا. أي: متى يعني التثنية أكثر من واحد، ومتى يكون ذلك هو المتعارف عليه

بمعنى، قد تفكّر بـ “groups” بينما تتطلب الصيغة “group” بدون حرف “s”.

وبالمثل، أحيانًا يتطلب الكود حالة محددة، مثل “Group” مقابل “group”.

أود أن أقول إنني أعرف، لكنني لا أعرف. أنصح باتباع أسلوب “القرد يرى، القرد يفعل” في البرمجة، ما لم يتدخل شخصٌ يعرف أفضل من ذلك.

لم أقم بأي شيء مع المجموعات (لا تظهر المجموعة في ملحقي)، وتفشل تلك المواصفات في جميع أنحاء discourse. سأقوم بعمل نسخة طبق الأصل من النسخة الرئيسية مرة أخرى لأرى ما إذا كان شوكي يتسبب في ذلك بطريقة ما. شكرًا مرة أخرى!

يبدو أنك بحاجة إلى ترحيل قاعدة بيانات الاختبار الخاصة بك

RAILS_ENV=test bin/rake db:migrate

إذا لم ينجح ذلك، احذفها وابدأ من جديد

RAILS_ENV=test bin/rake db:drop
RAILS_ENV=test bin/rake db:create
RAILS_ENV=test bin/rake db:migrate

تأكد مرتين من وضع RAILS_ENV=test، وإلا فقد تحذف قاعدة بيانات التطوير الخاصة بك بالخطأ (تمكنت من فعل ذلك بالخطأ هذا الأسبوع :man_facepalming:)

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

لقد أضفت للتو فحصًا للهجرات المعلقة في بداية مجموعة الاختبارات، مما يسهل تحديد هذا النوع من المشكلات في المستقبل

شكرًا لك، ديفيد! لقد لاحظت أنه يطبع تحذيرًا الآن. لا أفهم تمامًا لماذا كان من الصعب如此迁移 قاعدة بيانات الاختبار، ولكن بعد أن قمت بسلسلة من عمليات الحذف والإنشاء والهجرة، ثم بتنفيذ الأمر RAILS_ENV=test bin/rake db:migrate الذي أوصيت به، تمكنت من رؤية أن المواصفات الخاصة بي معطلة! الآن، يمكنني إصلاحها وأنا في طريق لتعلم كيفية كتابة المواصفات! شكرًا مجددًا على دفعتك، @Mittineague.

السياق خلف التزامي هو أنني اكتشفت خطأً حيث

RAILS_ENV=test rake db:drop db:create db:migrate

لا يشمل ترحيلات post_deploy. يجب عليك تشغيل db:migrate بمفردها.

سنقوم بالتأكيد بإصلاح ذلك، ولكن في غضون ذلك، يجب أن تقلل هذه الرسالة التحذيرية من الإحباط!

هل تم إصلاح ذلك؟ يبدو أن الأمر ./bin/rake db:drop db:create يقوم بحذف قاعدة بيانات الاختبار وإنشائها من جديد، لكن يبدو أن الأمر ./bin/rake db:migrate لا ينقل التغييرات (migrations) إلى قاعدة بيانات الاختبار أيضًا.