سؤال

لدي تطبيق Pylons حيث أرغب في نقل بعض المنطق إلى عملية مجمعة منفصلة.لقد قمت بتشغيله ضمن التطبيق الرئيسي للاختبار، ولكنه سيتطلب الكثير من العمل في قاعدة البيانات، وأود أن تكون عملية منفصلة سيتم تشغيلها في الخلفية باستمرار.سيقوم تطبيق pylons الرئيسي بإرسال الوظائف إلى قاعدة البيانات، وستقوم العملية الجديدة بتنفيذ العمل المطلوب في كل وظيفة.

كيف يمكنني تشغيل وحدة التحكم كبرنامج نصي مستقل؟

لدي حاليا:

from warehouse2.controllers import importServer
importServer.runServer(60)

وفي ملف وحدة التحكم، ولكن ليس جزءًا من فئة وحدة التحكم:

def runServer(sleep_secs):
    try:
        imp = ImportserverController()
        while(True):
            imp.runImport()
            sleepFor(sleep_secs)

    except Exception, e:
        log.info("Unexpected error: %s" % sys.exc_info()[0])
        log.info(e)

لكن بدء ImportServer.py في سطر الأوامر يؤدي إلى ما يلي:

2008-09-25 12:31:12.687000 Could not locate a bind configured on mapper Mapper|I
mportJob|n_imports, SQL expression or this Session
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

إذا كنت تريد تحميل أجزاء من تطبيق Pylons، مثل النماذج من خارج Pylons، فقم بتحميل تطبيق Pylons في البرنامج النصي أولاً:

from paste.deploy import appconfig
from pylons import config

from YOURPROJ.config.environment import load_environment

conf = appconfig('config:development.ini', relative_to='.')
load_environment(conf.global_conf, conf.local_conf)

سيؤدي ذلك إلى تحميل تطبيق Pylons، الذي يقوم بإعداد معظم الحالة بحيث يمكنك المتابعة لاستخدام نماذج SQLAlchemy والجلسة للعمل مع قاعدة البيانات.

لاحظ أنه إذا كان الكود الخاص بك يستخدم pylons globals مثل request/response/etc، فلن ينجح ذلك نظرًا لأنه يتطلب وجود طلب قيد التقدم.

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