سؤال

أقوم حاليًا بتشغيل مشروع Django في خادم الويب الخاص بمدرستي مع FCGI. لقد اتبعت الأدلة المتعددة التي توصي بتثبيت بيئة بيثون محلية افتراضية وقد نجحت بشكل رائع. كانت المشكلة الوحيدة التي واجهتها هي أن "لمس" ملف FCGI الخاص بي لإعادة التحميل لم يكن كافيًا ، لكن بدلاً من ذلك اضطررت إلى قتل خدمة Python عبر SSH. هذا لأنه يتم استخدام mod_fcgid.

ومع ذلك ، لم يعتقد المسؤول أنها كانت فكرة رائعة أنني ركضت بيثون المحلي. لقد اعتقد أنه من الأفضل أن أخبرته للتو الوحدات النمطية التي يجب تثبيتها على الجذر ، والتي كانت خدمة رائعة حقًا.

لكن القيام بذلك ، لم يعد بإمكاني قتل بيثون لأنه تحت الجذر (على الرغم من أنني غير أخلاقي كما أنا ، لقد حاولت بالتأكيد). كانت توصية Admins أنني يجب أن أحاول أيضًا جعل برنامج FCGI Script إعادة تحميل نفسه عن طريق التحقق من طابع الوقت. لقد حاولت العثور على وثائق حول كيفية القيام بذلك ، لكن تمويل القليل جدًا ، وبما أنني مبتدئ مطلقًا ، ليس لدي أي فكرة عما يمكن أن ينجح. أي شخص لديه خبرة في تشغيل Python/Django تحت mod_fcgid أو نصائح حول مكان العثور على الأدلة/الوثائق ذات الصلة؟

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

المحلول

هذا ما سأفعله:

## top of my .fcgi script
import sys, time
original_modules = sys.modules.copy()

## in a separate thread
old_ctime = os.path.getctime("mymodule.py")
while True:
    time.sleep(10)
    new_ctime = os.path.getctime("mymodule.py")
    if new_ctime > old_ctime:
        sys.modules = original_modules # reset all imports
        import mymodule
        mymodule.dofcgi()

منحت أن هذا ليس مثاليًا (قد تضطر إلى العبث مع الخيوط) ولكن يجب أن يمنحك فكرة عامة عن كيفية "إعادة التحميل" وحدة نمطية تمامًا.

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