2009-04-08 23 views
9

Mod_python kullanarak bir django uygulamasına sahibim, ortam dosyaları dosya kökünde (bildiğim, önerilmez) 'media' dizini tarafından sunulmak dışında oldukça genel bir yapılandırma var. Ben mod_wsgi ile test etmek ve dağıtmak istiyorum ama statik dosyaları sunmak için basit bir şey nasıl oluşturulacağını anlayamıyorum. Yukarıdaki mod_wsgi için benzer bir istisna yapmak için doğru yol olarakmod_wsgi ve Django ile statik dosyalar sunma

<Location '/'> 
    SetHandler MyApplication.xyz..... 
</Location> 

<Location '/media'> 
    SetHandler None 
</Location> 

docs ikinci blokta işaret gibi görünüyor django ama benim testlerde kökünün altına her şey hala gönderiliyor: Mod_python gibi Apache direktifleri kullanımına izin verir wsgi uygulamasına. Mod_wsgi ile statik bir medya dizini oluşturmanın iyi bir yolu var mı, yoksa zorlayıcı teknik nedenlerden dolayı bilinçsizce desteklenmeye çalıştığım şey nedir? Tamamen farklı yaklaşımlara işaret eden cevaplar açıktır.

cevap

13

mod_wsgi belgelerinde, WSGI uygulamasının bağlı olduğu URL'de görünen statik dosyaların nasıl kurulacağı açıklanmaktadır. Bkz: WSGI uygulama monte etmek WSGIScriptAlias ​​yönergesi kullanırken 'Seçenekler + ExecCGI' ihtiyaç olmadığı

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

Not söyledi. 'ExecCGI' seçeneği, uygulamaları kaynak olarak eklemek için AddHandler kullanıldığında gereklidir.

+0

Graham Dumpleton! Mod_wsgi için teşekkürler! Aslında siparişin asıl sorun olduğunu düşünüyorum, cgi direktifini kullanmadım. Modülünüz bana bir sürü şey yapmamı sağladı, bu soruyu sorduğumdan beri bir mod_wsgi alışkanlığı geliştirdim. – unmounted

+1

Dokümantasyon için teşekkürler. Uzun zamandır gördüğüm en iyi dokümanlar. DAHA FAZLASI insanlar onları okurdu !!!! – htmldrum

17

Aynı sunucuda bir düzine kadar Django sitesi çalıştırıyorum ve burada medya URL'lerini nasıl yapıyorum.

Her VirtualHost şu konfigürasyona sahiptir: Bir dosyada ele medyaya herhangi bir değişiklik yapabilir

Alias /media /path/to/media/ 
<Directory /path/to/media> 
    Include /etc/apache2/vhosts.d/media.include 
</Directory> 

Bu şekilde. Bu benim için çok iyi çalıştı

Order allow,deny 
Allow from all 
SetHandler None 
FileETag none 
Options FollowSymLinks 

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresByType image/gif "access plus 30 days" 
    ExpiresByType image/jpg "access plus 30 days" 
    ExpiresByType image/png "access plus 30 days" 
    ExpiresByType image/jpeg "access plus 30 days" 
    ExpiresByType text/css "access plus 30 days" 
    ExpiresByType application/x-javascript "modification plus 2 years" 
</IfModule> 

<IfModule mod_headers.c> 
    Header append Vary Accept-Encoding 
</IfModule> 

AddOutputFilterByType DEFLATE text/html text/css text/plain 

ve YSlow bir A notu (ayrıca Jeff Atwood on YSlow bakınız) alır:

Sonra benim media.include dosyası bu gibi görünüyor.

Ayrıca aşağıdaki yapılandırmayı kullanmak kök dir için, not: yapılandırma dosyasında Alias ​​/ medya (sonra olmalıdır

WSGIScriptAlias//path/to/app.wsgi 
<Directory /path/to> 
    Options +ExecCGI 
    Allow from all 
</Directory> 

... Apaçi sırayla takma ad baktığından

+0

Kökünüz için: Bu süper kuşak ve parantezler, ancak bir güvenlik POV'undan, 'unuzun içine bir bölümü koyar ve oradan "Tümünü izin ver" i hareket ettiririm. – Cheekysoft

İlgili konular