سؤال

أحاول حاليا إزالة إطار ثعبان تراثي (Webware 0.8.1) وطبقة Cherrypy 3.1.2 فوقها. بدلا من تحويل جميع صفحات الويب إلى صفحات Cherrypy، أعالجها فقط من خلال أجهزة ويب وتمريرها إلى Cherrypy Like.

def default(self, url, *suburl, **kwarg):    
  ...snip...
  strmout = DispatcherIO()
  request = HTTPRequest(local_req)
  transaction = self.create_transaction(request)
  response = self.create_response(transaction, strmout)
  transaction.setServlet(servlet)
  transaction.awake()
  transaction.respond()
  return str(strmout)

هذا يعمل بشكل جيد لأي صفحة لا تتضمن وظيفة. ولكن مع أي صفحة بما في ذلك وظيفة مثل تسجيل الدخول، فإن Cherrypy ستعلق في:

request = HTTPRequest(local_req)

هذا يستدعي fieldstorage الذي سيتصل المنشئ للبلاد cgi.fermeferstorage. هذا هو المكان الذي توقف فيه أخيرا.

ومع ذلك، إذا كنت في الضغط على CTRL-C على المحطة، فسوف تواصل المعالجة ثم إنهاء الصفحة بنجاح الأحمال. لذلك مع صفحة تسجيل الدخول، أود النقر فوق "تسجيل الدخول"، وسوف يتعطل، ثم اضغط بعد ذلك على Ctrl-C على المحطة، وسوف تسجيل الدخول إلي ثم إيقاف تشغيل Cherrypy.

لقد وجدت أنه إذا استخدمت Cherrypy.engine.start بدلا من QuickStart، فلن يبدأ أي معالجات إشارة. ما سيحدث في هذه الحالة سيؤدي إلى شيء مماثل فيما يتعلق بالسلوك السابق ولكنه سيستمر Cherrypy قيد التشغيل.

ماذا يمكن أن يكون تسبب هذه المشكلة؟ أنا أقدر حقا أي مساعدة. هتافات.

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

المحلول

ليس لدي حقا خبرة مع أجهزة الإنترنت، ولكن بناء على مظهر التعليمات البرمجية الخاصة بك، فإن WebWare تحاول استخدام CGI.FieldSstorage لاسترداد متغيرات الحقل الخاص بك، ولكن لا يمكن أن يحصل FieldStorage على الطول، أو يحصل على الطول بشكل غير صحيح (ربما لأن أيا كان برامج الويب لا يحصل على رأس طول المحتوى لا يعمل في بيئة WSGI الخاصة بك Cherrypy - التنفيذ الافتراضي يسترد HTTP_CONTENT_LENGTH متغير البيئة، وربما يدرويبات WEPWARE من المحتمل أن تفعل شيئا مشابها، لذلك قرأت ثم معلقة. كان لدي مشكلة مماثلة في كثير من الأحيان عند العمل مع CGI.

أفضل حل هو عدم استخدام CGI.Fieldstorage. إذا كان كائن HTTPREQUEST في السؤال يأتي من Webware، فستكون توصيتي إما منفذ موقعك إلى Cherrypy (أو بعض إطار الويب الآخر)، أو استخدم Webware في بيئتها الأصلية. قد يكون اختراق شيء ما هو ممكن، لكن WSGI مختلف تماما عن البيئة الأصلية في أجهزة الويب الخاصة بخادم التطبيقات الخاصة به.

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