WSGI, CGI ve çerçevelerin hepsi nasıl birbirine bağlıdır?
Apache 80 numaralı bağlantı noktasını dinler. Bir HTTP isteği alır. Yanıt vermenin bir yolunu bulma isteğini ayrıştırır. Apache'nin yanıt vermek için çok fazla seçeneği vardır. Yanıt vermenin bir yolu, bir komut dosyası çalıştırmak için CGI kullanmaktır. Yanıt vermenin başka bir yolu da bir dosyaya hizmet etmektir.
CGI söz konusu olduğunda Apache bir ortam hazırlar ve komut dosyasını CGI protokolü aracılığıyla çağırır. Bu standart bir Unix Fork / Exec durumudur - CGI alt işlemi soket ve stdout dahil olmak üzere bir işletim sistemi ortamını devralır. CGI alt süreci, Apache'ye geri dönen bir yanıt yazar; Apache bu yanıtı tarayıcıya gönderir.
CGI ilkel ve sinir bozucudur. Çoğunlukla her istek için bir alt süreç çatalladığı ve alt işlemin yanıtın sonunu belirtmek için stdout ve stderr'den çıkması veya kapatması gerekir.
WSGI, CGI tasarım modeline dayanan bir arabirimdir. Mutlaka CGI değildir - her istek için bir alt süreç çatallamak zorunda değildir. CGI olabilir, ama olmak zorunda değildir.
WSGI, CGI tasarım modeline birkaç önemli şekilde ekler. HTTP İstek Üstbilgilerini sizin için ayrıştırır ve bunları ortama ekler. Ortamda dosya benzeri bir nesne olarak POST yönelimli herhangi bir girdi sağlar. Ayrıca, size birçok biçimlendirme ayrıntısından tasarruf ederek yanıtı formüle edecek bir işlev sunar.
Temel CGI yapılandırmamda bir web çerçevesi (web.py veya cherrypy diyelim) çalıştırmak istersem ne bilmem / yüklemem / yapmam gerekir?
Bir alt işlemin çatallanmasının pahalı olduğunu hatırlayın. Bu sorunu çözmek için iki yol vardır.
Python'u Apache içine gömülümod_wsgi
veya mod_python
gömme; hiçbir işlem çatallanmaz. Apache, Django uygulamasını doğrudan çalıştırır.
Daemon mod_wsgi
veya mod_fastcgi
Apache'nin WSGI protokolünü kullanarak ayrı bir daemon (veya "uzun süren işlem") ile etkileşime girmesine izin verir. Uzun süredir çalışan Django işleminize başlarsınız, ardından Apache'nin mod_fastcgi işlevini bu işlemle iletişim kuracak şekilde yapılandırırsınız.
mod_wsgi
Her iki modda da çalışabileceğini unutmayın : katıştırılmış veya arka plan programı.
Eğer mod_fastcgi kadar okuduğunuzda, Django kullanan olduğunu göreceksiniz Flup mod_fastcgi tarafından sağlanan bilgilerden WSGI uyumlu arayüzler oluşturun. Boru hattı böyle çalışır.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django'nun çeşitli arayüzler için birkaç "django.core.handlers" vardır.
Mod_fastcgi için Django, manage.py runfcgi
FLUP ve işleyiciyi entegre eden bir özellik sunar.
Mod_wsgi için bunun temel bir işleyicisi vardır.
WSGI desteği nasıl kurulur?
Bu talimatları izleyin.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Arka plan için buna bakın
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index