2014-04-03 23 views
7

Şu anda projemde bulunan urls.py, son satır önemli olan şey.Django - Hizmet veren MEDIA/karşıya yüklenmiş dosyalar

urlpatterns = patterns('', 
    url(r'^', include('polls.urls', namespace="polls")), 
    url(r'^admin/', include(admin.site.urls)), 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

söylendi bana ve ben bu bir üretim ortamı için uygun olmadığını okudum. Bu neden böyle?

cevap

6

Django bir "web sunucusu" değil, bir "uygulama sunucusu" olacak şekilde tasarlanmıştır. Başka bir deyişle, Django'dan statik dosyaları sunmak Apache veya Nginx'i kullanmaktan daha kötü performans gösterecektir. Bu statik içerik sunucuları (1) C ile yazılmıştır ve (2) performans için optimize edilmiştir. Buna karşılık, Django, (1) saf Python ile yazılmıştır ve (2) bir uygulama geliştirmek için optimize edilmiştir (Şekil 1).

documentation'a bakın.


Bu tamamen iyi olabilir. Yükün yüksek olmadığını ve büyük dosyalar sunmadığını bilerek, üretimde statik içerik sunmak için Django'yu kullandım. Gerçekte ne tür bir ortamın "üretim" olduğuna bağlı.


Bilginize, A common üretim kurulum Nignx, Django, Gunicorn ve Amiri kullanmak olacaktır. Nginx, statik içeriği diskten sunuculara dönüştürür ve geri kalanını ise birden fazla Django örneğini çalıştıran Gunicorn'a yönlendirir. Supervisor Gunicorn'u izler ve koşmaya devam etmesini sağlar. Her şey ihtiyacınız olan web uygulamasının düzeyine bağlıdır.

1

Statik dosyaların django sunucusundan sunulması önerilmez. Önerilen yol onları ayrı bir sunucuda sunmaktır. static files deployment'u kontrol edin, ihtiyacınız olan her şeyi bulacaksınız.

+0

Webfaction kullanıyorum ve apache STATIC dosyalarımı kullanıyor ancak MEDIA hizmetimin nasıl sunulduğundan emin değilim. Medya klasörü şu anda proje klasörümün içinde yer alırken, statik_dosyalarım apache tarafından sunulmakta. Medya klasörümü static_files içine yerleştirmeli ve uygun bağlantıları yapmalı mıyım? Hala benim URL'lerde + statik (...) ihtiyacım varsa merak ediyorum. EVET/NO cevabı yeterli zamanınız varsa :) – AllTheTime

+1

Hey, ben de webfaction kullanıyorum. Ayrıca ayrı bir webfaction uygulamasında medya klasörüm var (sanırım statik için bir tane var.). Sonuç olarak, her web sitesi için biri statik, diğeri medya ve diğeri de Django için 3 farklı uygulamaya sahibim. Statik satırı urls.py dosyasında belirtmeniz gerekmez. Yalnızca doğru hedef klasöre ve yapılandırılmış URL'lere (uygulamaları web sitenize atarken belirttiğiniz URL'lere) yönlendirmek için {MEDIA, STATIC} _ROOT ve {MEDIA, STATIC} _URL (gerekirse STATICFILES_DIRS ile birlikte) _URL değerini ayarlamanız gerekir.). – argaen

+1

Btw, medya klasörünü static_files içine yerleştirmeyin, bunlar farklı şeylerdir, bu nedenle projenizin daha iyi bakımı ve yapısı için ayrılmayın. – argaen

İlgili konular