سؤال

لدي mysql ذهب بعيدا مع Django تحت WSGI. لقد وجدت إدخالات لهذه المشكلة على Stackoverflow ، ولكن لا شيء مع Django على وجه التحديد. لا تساعد Google ، باستثناء الحلول (مثل استقصاء موقع الويب كل مرة ، أو زيادة مهلة قاعدة البيانات). لا شيء نهائي. من الناحية الفنية ، يجب على Django و/أو MySQLDB (أنا أستخدم أحدث 1.2.3c1) محاولة إعادة الاتصال إذا شنق الخادم الاتصال ، لكن هذا لا يحدث. كيف يمكنني حل هذه المشكلة دون حلول؟

هل كانت مفيدة؟

المحلول

show variables like 'wait_timeout';

هذا هو الإعداد سوف يعيد خطأ "MySql ذهب بعيدا"
اضبطها على قيمة كبيرة جدًا لمنعها "تختفي"
أو إعادة صياغة اتصال MySQL البسيط بعد فترة معينة

نصائح أخرى

أعطى مطورو Django إجابة قصيرة واحدة لجميع الأسئلة مثل هذه في https://code.djangoproject.com/ticket/21597#comment:29

  • تحديد القرار إلى Wontfix

في الواقع هذا هو السلوك المقصود بعد #15119. انظر تلك التذكرة للمنطق.

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

  • الحل الموصى به: أغلق الاتصال بـ from django.db import connection; connection.close() عندما تعلم أن برنامجك سيكون في وضع الخمول لفترة طويلة.

  • Crappy Solution: قم بزيادة Wait_timeout بحيث يكون أطول من الحد الأقصى لوقت الخمول في البرنامج.

في هذا السياق ، يكون وقت الخمول هو الوقت بين اثنين من استعلامات قاعدة البيانات المتتالية.

  • يمكنك إنشاء برامج وسيطة إلى ping () اتصال MySQL (الذي سيتم إعادة الاتصال إذا تم توقيته) قبل معالجة العرض

  • يمكنك أيضًا إضافة الوسيطة للاستمتاع بالاستثناء وإعادة الاتصال وإعادة محاولة الرأي (أعتقد أنني أفضل الحل أعلاه على أنه أبسط ، ولكن يجب أن يعمل من الناحية الفنية وأن تكون على افتراض أن المهلة نادرة. هذا يفترض أيضًا أن وجهة نظر فاشلة لا يوجد بها جانب التأثيرات ، وهي خاصية مرغوبة ولكن قد يكون من الصعب القيام بها ، خاصة إذا كنت تكتب إلى نظام ملفات وكذلك DB في عرضك.)

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