كيف الثعبان على شبكة الإنترنت أطر WSGI و CGI تناسب معا

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي Bluehost الحساب حيث لا يمكن تشغيل البرامج النصية بيثون CGI.أعتقد أنه من أبسط CGI, لأن تشغيل يجب أن تحدد ما يلي .htaccess:

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

الآن كلما أنظر ويب البرمجة مع بيثون ، سمعت الكثير عن WSGI وكيف معظم الأطر استخدامه.ولكن أنا فقط لا أفهم كيف أن كل شيء يناسب معا خاصة عندما ملقم ويب معين (Apache يعمل في المضيف آلة) و لا شيء أنا يمكن أن تلعب حقا مع (باستثناء تحديد .htaccess الأوامر).

كيف WSGI, CGI, و الأطر كل اتصال ؟ ما الذي أحتاج إلى معرفته, تثبيت, و هل إذا كنت ترغب في تشغيل إطار الشبكة (أقول web.py أو CherryPy) على بلدي الأساسية CGI التكوين ؟ كيفية تثبيت WSGI الدعم ؟

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

المحلول

كيف WSGI, CGI, و الأطر كل اتصال ؟

أباتشي يستمع على المنفذ 80.يحصل طلب HTTP.فإنه يوزع على طلب إيجاد وسيلة للرد.أباتشي لديها الكثير من الخيارات من أجل الاستجابة.طريقة واحدة للرد هو استخدام CGI لتشغيل البرنامج النصي.طريقة أخرى للرد هو ببساطة تخدم الملف.

في حالة CGI ، أباتشي تعد بيئة و استدعاء البرنامج النصي من خلال CGI البروتوكول.هذا هو معيار Unix شوكة/Exec الوضع-CGI subprocess يرث نظام التشغيل البيئة بما في ذلك مأخذ و المعياري.CGI subprocess يكتب ردا, الذي يعود إلى اباتشي;أباتشي يرسل هذا الرد إلى المتصفح.

CGI بدائية مزعج.في الغالب لأنه شوك على subprocess لكل طلب ، subprocess يجب الخروج أو إغلاق المعياري و stderr للدلالة على نهاية الرد.

WSGI هو واجهة تستند إلى CGI تصميم نمط.ليس بالضرورة CGI-أنه لا يجب أن شوكة subprocess لكل طلب.يمكن أن يكون CGI, ولكن لا يجب أن يكون.

WSGI يضيف إلى CGI نمط تصميم في عدة طرق هامة.فإنه يوزع طلب HTTP رؤوس لك و يضيف هذه البيئة.ومن لوازم أي وظيفة الموجهة نحو الإدخال كملف مثل الكائن في البيئة.كما يوفر لك وظيفة التي من شأنها صياغة استجابة, مما يوفر لك الكثير من تفاصيل التنسيق.

ماذا يجب أن تعرف / تثبيت / هل إذا كنت ترغب في تشغيل إطار الشبكة (أقول web.py أو cherrypy) على بلدي الأساسية CGI التكوين ؟

يذكر أن التفرع على subprocess مكلفة.هناك طريقتان للتغلب على هذه.

  1. جزءا لا يتجزأ من mod_wsgi أو mod_python يضمن الثعبان داخل اباتشي;لا عملية متشعب.أباتشي يدير جانغو التطبيق مباشرة.

  2. شيطان mod_wsgi أو mod_fastcgi يسمح أباتشي للتفاعل مع منفصلة الشيطان (أو "العملية طويلة الامد") باستخدام بروتوكول WSGI.يمكنك بدء تشغيل طويلة جانغو العملية ، ثم تكوين أباتشي mod_fastcgi على التواصل مع هذه العملية.

علما بأن mod_wsgi يمكن أن تعمل في أي وضع:جزءا لا يتجزأ أو الخفي.

عندما تقرأ على mod_fastcgi ، سترى أن يستخدم جانغو flup لإنشاء WSGI متوافق مع واجهة من المعلومات المقدمة من قبل mod_fastcgi.خط أنابيب يعمل مثل هذا.

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

جانغو عدة "جانغو.الأساسية.معالجات" على مختلف الواجهات.

بالنسبة mod_fastcgi, جانغو يوفر manage.py runfcgi يدمج FLUP و معالج.

بالنسبة mod_wsgi هناك نواة معالج هذا.

كيفية تثبيت WSGI الدعم ؟

اتبع هذه التعليمات.

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

على خلفية رؤية هذا

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index

نصائح أخرى

أعتقد فلوريان الإجابة يجيب على جزء من السؤال عن "ما هو WSGI" ، خاصة إذا كنت تقرأ الحماسي.

أما عن الأسئلة التي تشكل نحو النهاية:

WSGI, CGI, FastCGI.... الخجميع بروتوكولات خادم الويب إلى تشغيل التعليمات البرمجية, وتقديم المحتوى الديناميكي الذي يتم إنتاجه.قارن هذا إلى ويب ثابت العامل ، حيث يوجد ملف HTML بسيط هو الأساس تسليمها إلى العميل.

CGI ، FastCGI و SCGI هي اللغة الملحد. يمكنك كتابة البرامج النصية CGI في Perl, Python, C, باش, أيا كان.CGI يعرف التي للتنفيذ سوف يطلق استنادا إلى عنوان URL ، كيف سيكون تسمى:الحجج و البيئة.كما يعرف كم قيمة الإرجاع يجب تمريرها مرة أخرى إلى خادم الويب الخاص بك مرة واحدة للتنفيذ النهائي.الاختلافات هي في الأساس أمثلية أن تكون قادرة على التعامل مع المزيد من الطلبات ، والحد من الكمون وهلم جرا ؛ المفهوم الأساسي هو نفسه.

WSGI هو الثعبان فقط. بدلا من لغة الملحد بروتوكول قياسي وظيفة التوقيع هو تعريف:

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

الذي هو الكامل (وإن كانت محدودة) WSGI التطبيق.خادم الويب مع WSGI الدعم (مثل أباتشي مع mod_wsgi) يمكن استدعاء هذه الوظيفة كلما طلب يصل.

السبب في هذا هو عظيم جدا هو أن نتمكن من تجنب الفوضى خطوة تحويل من HTTP GET/بعد أن CGI إلى الثعبان ، والعودة مرة أخرى على طريقة للخروج.انها أكثر من ذلك بكثير مباشرة, النظيفة وكفاءة الربط.

كما أنه يجعل من الأسهل بكثير أن يكون طويل الأمد الأطر يركض وراء خوادم الويب ، إذا كل ما يحتاج إلى القيام به من أجل طلب استدعاء دالة.مع عادي CGI عليك بدء إطار كله حتى لكل طلب.

أن يكون WSGI الدعم, سوف تحتاج إلى تثبيت WSGI وحدة (مثل mod_wsgi) ، أو استخدام ملقم ويب مع WSGI خبز في (مثل CherryPy).إذا لم يكن أي من هؤلاء ممكنة ، يمكن أن استخدام CGI-WSGI جسر معين في الحماسي.

يمكنك تشغيل WSGI على CGI كما يدل Pep333 كمثال على ذلك. ولكن في كل مرة كان هناك طلب بدء مترجم بيثون الجديد والسياق كله (اتصالات قاعدة البيانات، وما إلى ذلك) يجب أن يكون بناء والتي تأخذ كل الوقت.

وأفضل إذا كنت ترغب في تشغيل WSGI سيكون إذا المضيف الخاص بك سوف تثبيت mod_wsgi و قدم التكوين المناسب تأجيل التحكم إلى تطبيق لك.

Flup طريقة أخرى لتشغيل مع WSGI لأي خادم التي يمكن أن تحدث <لأ href = "HTTP : //www.fastcgi.com/drupal/ "يختلط =" noreferrer "> FCGI و <لأ href =" http://www.mems-exchange.org/software/scgi/ "يختلط =" noreferrer "> SCGI أو AJP. من واقع خبرتي FCGI فقط يعمل حقا، ويمكن استخدامه في Apache إما عن طريق mod_fastcgi أو ما اذا كان يمكنك تشغيل البرنامج الخفي بيثون منفصل مع mod_proxy_fcgi .

WSGI هو بروتوكول بكثير مثل CGI، الذي يحدد مجموعة من القواعد كيف خادم وبيثون كود يمكن أن تتفاعل، فمن يعرف بأنه Pep333 . فإنه يجعل من الممكن أن العديد من مزودات الويب المختلفة يمكن استخدام العديد من الأطر والتطبيقات المختلفة باستخدام نفس بروتوكول التطبيق. وهذا مفيد جدا ويجعل من المفيد جدا.

إذا كنت غير واضحة على جميع المصطلحات في هذا المجال، وأنها تسمح للمواجهة، ولها مربكة-اختصار لادن واحد، وهناك أيضا قارئ خلفية جيدة في شكل HOWTO الثعبان الرسمي الذي يناقش CGI مقابل FastCGI مقابل WSGI وهلم جرا: http://docs.python.org/howto/webservers.html

وانها طبقة تجريد بسيطة لبيثون، أقرب إلى ما هي المواصفات بريمج جافا. في حين CGI هو مستوى منخفض جدا وفقط مقالب الاشياء في البيئة العملية والمعيار داخل / خارج، ونموذج اثنين من المواصفات أعلاه طلب HTTP والاستجابة كما يبني في اللغة. لكن انطباعي هو أن في الناس بيثون لم استقر تماما على التنفيذ الفعلى بحيث يكون لديك مزيج من تطبيقات المرجعية، وغيرها من المكتبات فائدة من نوع التي توفر أمور أخرى جنبا إلى جنب مع الدعم WSGI (مثل لصق). بالطبع قد أكون مخطئا، وأنا الوافد الجديد لبيثون. في "البرمجة على شبكة الإنترنت" المجتمع يأتي في المشكلة من اتجاه مختلف (استضافة مشتركة، تراث CGI، والمخاوف فصل امتياز) من زيارتها الناس جافا ترف بدءا من (تشغيل حاوية مؤسسة واحدة في بيئة مخصصة ضد جمعت بشكل ثابت ونشرها كود).

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