تلخيص هذا من Latest update won't build due to various reasons نظرًا لأن هذا الموضوع يتعلق بثلاث مشكلات مختلفة في الوقت الحالي.
المشكلة:
عند محاولة تحديث Discourse مع تثبيت المكون الإضافي للذكاء الاصطناعي، ينتج عن التحديث خطأ مع
PG::UndefinedColumn: ERROR: column llm_models.url does not exist
LINE 1: SELECT "llm_models".* FROM "llm_models" WHERE "llm_models"
ويجعل Discourse غير قابل للاستخدام حتى تتم إزالة المكون الإضافي للذكاء الاصطناعي.
متى يحدث هذا:
عند تحديث مثيل مع تثبيت المكون الإضافي للذكاء الاصطناعي
من إصدار لا يحتوي على الترحيل 20240514171609 بعد
إلى الالتزام 8d5f901 أو أحدث
(كان سؤالي الرئيسي هو سبب حدوث هذا فقط عند تحديث مكون إضافي مثبت بالفعل وليس عند تثبيت المكون الإضافي حديثًا. الإجابة هي أن النواة تلتقط استثناءات PG::UndefinedTable ولكن ليس PG:UndefinedColumn. إذا كان المكون الإضافي مثبتًا بالفعل، فإن الاستثناء هو الأخير، وإذا كان المكون الإضافي جديدًا تمامًا، فهو الأول).
السبب:
يستدعي plugin.rb الدالة LlmModel.enable_or_disable_srv_llm! التي تعتمد على وجود العمود llm_models.url. ولكن إذا لم يتم تطبيق الترحيل 20240514171609 (الذي يضيف هذا العمود) بعد، فإنه يتعطل.
المشكلة هي أن db:migrate يقوم أيضًا بتشغيل هذا الرمز، مما يؤدي إلى تعطل مهمة rake قبل تطبيق الترحيل.
الحلول المقترحة / الإصلاحات:
- تغيير الرمز إلى
LlmModel.enable_or_disable_srv_llm! if Discourse.running_in_rack?(بحيث لا تستدعيهdb:migrate)
أو - تغيير الرمز إلى
LlmModel.enable_or_disable_srv_llm! rescue nil(بحيث لا يتعطل)
أو - تغيير رمز التمهيد في النواة لالتقاط
PG::UndefinedColumnبالإضافة إلىPG::UndefinedTable(بحيث يتم التقاط هذه المشكلة والمشكلات المماثلة المستقبلية)