تؤدي فهرسة FOSElasticaBundle إلى إبطاء Symfony إلى حد التوقف
-
21-12-2019 - |
سؤال
لا تعمل فهرسة الأشياء في ElasticSearch باستخدام FOSElasticaBundle.
إليك من التكوين الخاص بي (app/config/config.yml):
fos_elastica:
clients:
default: { host: localhost, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
website:
client: default
types:
idea:
mappings:
title: { boost: 6 }
persistence:
driver: orm
model: Ideside\IdeaBundle\Entity\Idea
provider: ~
finder: ~
listener: ~
عندما أعلق على كل هذا، بحيث لا يتم فهرسة الأشياء في ES، كل شيء سوف يعمل بشكل جيد.ولكن عندما يكون هذا موجودًا في ملف config.yml، وأقوم بنشر كيان باستخدام نموذج، سيصاب معجب الكمبيوتر بالجنون لمدة دقيقتين وسيتم إرجاع الاستجابة التالية:
"خطأ فادح:خطأ:تم تجاوز الحد الأقصى لوقت التنفيذ وهو 120 ثانية"
عندما أقوم بتغيير إعدادات config.yml بحيث لا يكون الكيان المحدد الذي أنشره من بين الكيانات التي تتم فهرستها في ES، كل شيء سيعمل بشكل جيد، ولكن فهرسة صف قاعدة بيانات واحد فقط في ES يمكن أن يكون كافيًا لإحضار الخادم إلى التوقف على ما يبدو.
ال php app/console fos:elastica:populate
-command سينتهي إذا كانت قاعدة البيانات فارغة، كما أنني جعلتها تعمل مرة أو مرتين مع فهرسة صف قاعدة بيانات واحد إلى ES، ولكن حتى مع وجود كميات متواضعة جدًا من البيانات في قاعدة البيانات، ستعمل المروحة كالمجانين لمدة دقائق دون الحاجة إلى الانتقال ماضي Resetting website
(السطر الأول الذي تطبعه المحطة الطرفية عند تشغيل أمر التعبئة).
الأشياء التي قد تساعد في فهم ما هي المشكلة:
لقد جعلت تكامل ES يعمل بنجاح في هذا المشروع من قبل.فهرسة قاعدة البيانات، وفهرسة الأشياء الجديدة التي تتم إضافتها إلى قاعدة البيانات، والبحث في ES - بدا كل شيء وكأنه سحر.لكن تكامل ES تم الاحتفاظ به على فرع git محدد لم يتم دمجه مع المشروع الرئيسي قبل الآن، والآن لم يعد يعمل.
قبل دمج الفرع ES المتكامل مع الفرع الرئيسي، استخدم الفرع الرئيسي، من بين أشياء أخرى، FOSRestBundle.
واجه الأشخاص الآخرون في الفريق الذين سحبوا الفرع الرئيسي نفس المشكلة، لذلك يبدو أن المشكلة تكمن في رمز المشروع، وليس في عقدة ElasticSearch الخاصة بي (على الرغم من أنني لا أستطيع التأكد).
هل لدى أي منكم أي فكرة عما قد يكون الخطأ؟أي مساعدة ستكون بشدة مُقدَّر!
إذا كان المزيد من المعلومات أو المزيد من أقسام التعليمات البرمجية يمكن أن تساعد في تحديد الخطأ، فسأقدم لك ذلك بكل سرور.
المحلول
حدثت المشكلة بسبب المراجع الدائرية عندما يتم إجراء تسلسل للكائنات: http://en.wikipedia.org/wiki/Circular_reference.
إذا كانت لديك مشكلة مماثلة، فيمكنك حلها عن طريق تعديل الخصائص التي يتم تسلسلها باستخدام التعليقات التوضيحية: http://jmsyst.com/libs/serializer/master/reference/annotations.