لماذا يتطلب اتصال MongoDB البعيد مصادقة في كل استعلام؟

StackOverflow https://stackoverflow.com/questions/3456267

سؤال

بعد القتال مع أشياء مختلفة هنا وهناك ، تمكنت أخيرًا من الحصول عليها زجاجة الركض على 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top