Paylaşılan bir IIS sunucusu çalıştıran Python-newbie'ye Django / Python yüklemesi nasıl açıklanır [kapalı]


9

Kontrolüm dışındaki nedenlerden dolayı, web sitemiz sunucuları için IIS kullanan bir barındırma sağlayıcısı ile barındırılmaktadır. Şu anda PHP ve ASP'nin yanı sıra cgi komut dosyaları aracılığıyla Python ve Perl de sunuyorlar.

Web sitemizi yeniden tasarlamak, yeniden yazmak ve PHP'den Python / Django kurulumuna geçmek istiyorum. Barındırma sağlayıcısı önerilere açıktır, ancak "Python'un ne olduğunu veya nasıl çalıştığını gerçekten bilmiyoruz, ancak bize açıklayabilirseniz, ihtiyacınız olan her şeyi ayarlamaya çalışacağız" .

Ancak, nasıl apache / mod_python paylaşılan bir barındırma ortamında Django kurmak biliyor olabilir, ama ben IIS üzerinde nasıl kuracağına dair hiçbir fikrim yok ve kesinlikle paylaşılan bir barındırma ortamı için nasıl kurulacaktı değil. Biraz googled, ancak bulduğum kaynakların çoğu sysadmin 1) Python / Django ve 2) kendi sitesi için adanmış IIS barındırma kullandığını varsayar.

Birisi işlemi barındırma sağlayıcımla nasıl açıklayabileceğimi açıklayabilir mi veya barındırma sağlayıcama iletebileceğim iyi, ayrıntılı kaynaklara işaretçiler verebilir miyim? Barındırma çalışanlarının IIS hakkında "her şeyi" bildiklerini, ancak Python ile nasıl başa çıkacaklarını bilmediklerini unutmayın.

Yanıtlar:


8

IIS kullanmaya devam ediyorsanız, mümkünse CGI yerine PyISAPIe kullanın. PyISAPIe için talimatlar ve bağlantılar aşağıdadır. IIS'yi yönetiyorsa web barındırıcınız ISAPI uzantıları hakkında Python'dan çok daha fazla bilgi sahibi olacak ve PyISAPIe ile Python hakkında çok fazla şey bilmeleri gerekmiyor.

Bunu yapmanın çok daha iyi bir yolu, ISAPI UZATMASI olan PyISAPIe kullanıyor . PyISAPIe, IIS7'deki CGI'dan çok, çok daha hızlıdır. Bunun yaptığı Apache'deki mod_python'a benzer. PyISAPIe proje ana sayfasında PyjanAPIe üzerinden WSGI ile Django kurulumu için talimatlar bulunur. Bu, genel / yüksek trafikli bir web sitesi için performansınızı makul hızlara getirecektir.

CGI ortamı aracılığıyla bir IIS + Python'da Django kurulumu, herhangi bir üretim kullanımı için korkunç derecede yavaş olacaktır. Bunu asla dakika başına bir avuç istekden daha fazla hizmet vermeyi beklediğiniz bir web sitesi için kullanmamalısınız. Ayrıca, Django uygulamasının işlemi her yeni istekle yeniden başlatıldığından, sizi Django'nun önbelleğe alma çerçevesinde bellekte önbelleğe alabileceğiniz şeyle ciddi şekilde sınırlar.

Mod_python içeren Apache, lighttpd, vb. Gibi aklı başında bir web sunucusunda, Django işlemini çalıştıran Python yorumlayıcısı bellekte kalır ve zamanla birçok isteği işleyen her yeni Apache çalışan iş parçacığı ile başlatılır. Bu, her yeni istek için Python + Django'dan çıkılmadığı ve yeniden başlatılmadığı anlamına gelir. Bir FastCGI kurulumunda, web sunucusu (örneğin Apache veya lighttpd), FastCGI protokolü üzerinden FastCGI uygulamasıyla (Django web uygulamanız) iletişim kurduğu bir soket (UNIX etki alanı veya TCP) oluşturur. HTTP proxy kurulumları için Ditto (FastCGI yerine HTTP konuşuyorlar). Bir CGI ortamında, Django uygulamasını çalıştıran ve her istek için tamamen yeni olan Python yorumlayıcısı çağrılır, böylece uygulama istekler arasında durumu bellekte tutamaz ve veritabanında herhangi bir yerde önbellekleme yapamaz.

IIS + CGI + Django kullanmanız gerekiyorsa, bu korkunç korkunç şeyi nasıl başaracağınız yeterlidir: Django uygulamanızı çalıştıran (CGI ve WSGI arasında çeviri yapar) kendi CGI komut dosyanızı oluşturmak için aşağıdaki kodu kullanın . Django uygulamanızı ve kodunuzu göstermesi için komut dosyasını biraz düzenlemeniz gerekir. Bu, istekleri iletmeniz gereken CGI betiğidir. Ardından, tüm istekleri CGI betiğinize yönlendirmeniz / yeniden yazmanız gerekir ...

IIS6 altında, IISRewrite gibi bir mod_rewrite eşdeğeri gerekir, ki bu bence ücretsiz değildir ve kapalı kaynaktır. IIS7 altında Microsoft nihayet bir URL yeniden yazma modülü içeriyordu. Belgeleri burada bulunmaktadır . IIS7'de yeniden yazma kuralları oluşturma talimatları burada . CGI betiğiniz tarafından işlenmek üzere hedef temel URL'deki her şeyi iletmek istersiniz.


Barındırma paylaşıldığından, asıl sorun, barındırma sağlayıcısının PyISAPIe'yi kendi ihtiyaçlarıma ve diğer müşterilerinin farklı ihtiyaçlarına uyacak şekilde nasıl yapılandıracağıdır. Ana sayfada WSGI ile Django kurma talimatlarını bulamadım ... Her şey başarısız olursa, sadece CGI yaklaşımını kullanacağım. Haftada 400'den az istekle, hostinge geçmeye karar verene kadar CGI çözümü ile yaşayabileceğimizi düşünüyorum.
Epcylon

1

IIS'de FastCGI'de Python nasıl kurulur

FastCGI IIS 7+ üzerinde Python'u nasıl kuracağınız aşağıda iyi bir DJango kurulumunun yolunu açar

... Python kodunuzda ilerlemenizi sağlayan bir hata ayıklayıcıyı sürece bağlayabilirsiniz

Bu örnekte IIS yönetim konsolu kullanılmaz, ancak sonuçta elde edilen yapılandırma dosyalarının içeriği listelenir

Aşama 1

Python + iyi bir hata ayıklayıcı yükleyin (bu örnekte mükemmel bir araç bulduğum WingIDE kullanılıyor) Bu örnekte c: \ python27 klasörü varsayılmıştır

Adım 2

Bir web klasörü oluşturun, örneğin localhost c: \ inetpub \ wwwroot \ mypythonfolder üzerine ve aşağıdaki web.config dosyasını buraya yerleştirin:

| scriptProcessor yönergesindeki dikey çizgi karakteri. Bu, IIS tarafından komut dosyasını bir fastCgi uygulamasına eşlemek için kullanılır (3. adım). Aşağıdaki 3. adımdaki tam yol + dikey çizgi karakteri + bağımsız değişken ayarlarını karakter karakter eşleştirmelidir.

Aşama 3

C: \ windows \ system32 \ inetsrc \ config klasöründeki applicationHost.config dosyasında, aşağıdaki bölüme yer verin:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

4. Adım

C: \ python27 \ lib \ mylib \ myfcgi.py dosyasında aşağıdaki kodu girin:

import wingdbstub

import os, io, sys ret = "ortam: \ r \ n" os.environ.keys () içindeki param için (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" sys.argv'deki arg için: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Adım 5

IUSR'nin c: \ temp klasörünüze yazma haklarına sahip olduğundan emin olun

6. Adım

Wingdbstub.py ve wingdebugpw'yi c: \ python27 \ lib \ mylib \ klasörünüze koyun. Bu kanat tarafında hata ayıklamayı mümkün kılacaktır. Bu dosyalar kanat kurulumunuzla birlikte verilir. Not: Python'un da kodunuzu wingstub.pyc'ye derlemesi gerekiyorsa, python işlemi IIS tarafından bu hesap altında başlatılacağı için IUSR'ın bu klasörde yazma haklarına ihtiyacı vardır.

6. Adım

Wingdb'yi açın ve 'import os, io, sys' satırında bir kesme noktası ayarlayın

Adım 7

Tarayıcınızda vurun http: // localhost / mypythonfolder

Her şey yolunda giderse, çalışan kodun kesme noktanızda görüntülenmesi için wingide tetiklenmelidir. Değilse: - ya bir güvenlik duvarı sorunu var. Python işlemi, bir tcp bağlantısı aracılığıyla WingIDE arayüzü ile iletişim kurar - veya wingide'da güvenlikle ilgili bir sorun vardır. Wingdebugpw dosyasının, temel olarak wingide yüklemenize karşı erişimi doğrulayan bir parola veya jeton içeren doğru sürümüne ihtiyacı vardır. Bu durumda olmasaydı, bilgisayarınıza tcp erişimi olan herkes kodunuza karşı hata ayıklama olabilir.

8. Adım

C: \ temp'de günlük dosyasının oluşturulduğunu doğrulayın. 7. adıma devam edemiyorsanız bu da işe yaramalıdır

9. Adım

Bu sayfanın hata ayıklayıcıyı tetiklediğini, ancak web sayfasını tarayıcıya döndürmediğini unutmayın. Bazı arka plan bilgileri: web sunucusu fastcgi'yi 'kayıtlar' aracılığıyla iletir. Bu, her bir kullanıcı isteğinin uygulamanıza birden fazla ayrı 'kayıt' halinde paketlendiği anlamına gelir. Her kayıt, bir isteğin başlangıcını, sorgu dizesini, değişkenleri vb. Gösteren bir veri yapısıdır. Bu kayıtların tek bir istekte paketinin açılması biraz zahmetlidir, http: //www.fastcgi'nin fastcgi belirtimini izler. .com / devkit / doc / fcgi-spec.html # S1

C: \ python27 \ lib \ mylib \ myfcgi.py içeriği olarak helicontech tarafından sağlanan zoofcgi.py dosyasının bir kopyasını bıraktım. Bu python dosyası bu kayıtları çözebilir ve bir sayfayı sunabilir ve hata ayıklamak için oldukça ilginçtir. Ayrıca helicontech isteğe bağlı olarak IIS ve zoofcgi.py arasında oturan bir dll sağlar ancak bu dll kesinlikle gerekli değildir. Ben msft tarafından sağlanan fastcgi uygulamasının biraz geliştirilmiş ve genel bir sürümünü uyguladığına inanıyorum. Ancak kendi dll kullandığınızda, kodunuzda adım atmak istediğinizde işlem oldukça hızlı bir şekilde sonlandırılır ve IIS / DLL hiçbir yanıt bir sn veya 2 içinde geri geldiği sonucuna varınca python işlemini öldürür.

Bu kadar. Prensip olarak, IIS ile python kodunuz arasındaki iletişim adlandırılmış kanallarla yapılır. Tcp soketlerini kullanarak ayarlayabilmelisiniz, ancak hangi bağlantı noktasının kullanıldığını anlayamadım (stdin'in daha sonra seçilebilecek () edilebileceği bağlantı noktasına dönüştürülmesi gerektiğine inanıyorum ama bunu vermedim herhangi bir girişim)


0

Bunu Python ile denemedim, ama Perl ile bir CGI olarak harika çalıştı. ActiveState ürünleri IIS ile sorunsuz bir şekilde bütünleşir. ActivePerl ile büyük başarı elde ettim. Ayrıca, muhtemelen orada hile yapacak ActivePython var. Sonra sadece Django yüklemek yüklemek istiyorsunuz düşünüyorum .

DÜZENLEME: Tamam, IIS ile görünmeyen entegrasyonu çizin ... ANCAK, işte IIS'ye nasıl entegre edeceğiniz hakkında bir makale . Iron Python'u bir Windows kutusu için dağıtımınız olarak da düşünebilirsiniz .

Sağlayıcı için, ASP / ASP.NET gibi bir web geliştirme platformu olduğundan ve Python'un onunla geliştirmek için kullanılan dil olduğundan daha fazlasını bilmeleri gerektiğinden şüpheliyim.

Yukarıda bahsettiğim kurulum kadar, bunu deneyeceğim ve nasıl gittiğini göreceğim. Tamam çalışır hale getirirsem not yazacağım!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.