لماذا يتطلب اتصال MongoDB البعيد مصادقة في كل استعلام؟
سؤال
بعد القتال مع أشياء مختلفة هنا وهناك ، تمكنت أخيرًا من الحصول عليها زجاجة الركض على Apache وتشغيل موقع يعمل MongoDB. أنا معتاد على تشغيل تطبيقات Django ، لذلك سأتعلق بذلك قليلاً في سؤالي.
المشكلة
في كل مرة يتم فيها تحميل صفحة عبر butterpy ، يحتاج الاتصال إلى قاعدة بيانات MongoDB الموجودة على mongohq.com إلى إعادة صياغة (مما يعني أنه ربما كان عليه إعادة الاتصال).
ماذا وجدت
أرفقت أ db.keep_alive()
الوظيفة إلى الجزء العلوي من كل وظيفة نموذج ، بحيث قبل تشغيل أي استعلام MongoDB ، فإنه يحاول تشغيل استعلام بسيط. إذا فشلت ، فإنه يمسك أخطاء التشغيل أو AutorEconnect ثم يستدعي db.authenticate()
وظيفة. بعد إعادة صياغته ، أتناول سجلًا إلى سجلات DB لمراقبة عدد المرات التي تحتاج إلى إعادة صياغتها. حاليًا ، يحتاج إلى إعادة صياغة في كل تحميل صفحة (يتطلب تشغيل استعلام). هذا ليس صحيحا.
الفرق من Django
أستخدم هذا المفهوم نفسه في Django ، ووجدت أن اتصال DB يحتاج فقط إلى المصادقة بعد 10-15 دقيقة من عدم تشغيل أي استعلامات.
لا أفهم لماذا يختلف إنشاء اتصال Pymongo في Django عن إنشاء واحدة في الزجاجة ، لأنني أستخدم نفس برنامج التشغيل والوظائف والأساليب. أنا لا أستخدم أي orms أو أي شيء من هذا القبيل أيضًا.
الإصدارات
- زجاجة: 0.9.dev
- Django: 1.2.1 النهائي
- Pymongo: 1.8
أنا أقدر المساعدة!
تحديث: تمكن أحد الأصدقاء من إلقاء نظرة سريعة ولاحظ ما يلي قد يساعد في الإجابة على سؤالي.
يبدو أن كل طلب يطلق عملية Python جديدة ، بدلاً من Django ، حيث تظل عملية واحدة تعمل لفترة طويلة من الزمن.
المحلول
انتهى الأمر للتو ليكون شيئًا غريبًا بين زجاجة ومونغوه. لم يتم العثور على حل حقيقي ، لكنني لم أتمكن من إعادة إنشائها بأطر أخرى. أي أفكار أخرى موضع تقدير.
نصائح أخرى
هل يحتوي apache xxx.conf الخاص بك على شيء مثل:
WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1
WSGIProcessGroup project
أعتقد أنه يجب أن يكون الأكثر أهمية threads=1