2015-06-01 22 views
5

Chcę uruchomić dwa różne django_projects każdego w różnych virtualenv. Jest to kod:uruchomić wiele projektów django w różnych virtualenv na apache

ServerName ubuntu_server_apache 

<VirtualHost *:80> 

ServerName dev.hexxie.com 

ErrorLog "/home/ashish/deployments/mysite_dev/conf/mysite_dev_error.log" 

WSGIScriptAlias//home/ashish/deployments/mysite_dev/mysite/mysite/wsgi.py 

Alias /static /home/ashish/deployments/mysite_dev/static_root 
<Directory /home/ashish/deployments/mysite_dev/static_root> 
Require all granted 
</Directory> 

Alias /media /home/ashish/deployments/mysite_prod/data/media 
<Directory /home/ashish/deployments/mysite_prod/data/media> 
Require all granted 
</Directory> 

<Directory /home/ashish/deployments/mysite_dev/mysite/mysite> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

</VirtualHost> 
WSGIPythonPath /home/ashish/deployments/mysite_dev/mysite:/home/ashish/.virtualenvs/mysite_dev/lib/python2.7/site-packages 



<VirtualHost *:80> 

ServerName hexxie.com 
ServerAlias *.hexxie.com 

ErrorLog "/home/ashish/deployments/mysite_prod/conf/mysite_error.log" 

WSGIScriptAlias//home/ashish/deployments/mysite_prod/mysite/mysite/wsgi.py 

Alias /static /home/ashish/deployments/mysite_prod/static_root 
<Directory /home/ashish/deployments/mysite_prod/static_root> 
Require all granted 
</Directory> 

Alias /media /home/ashish/deployments/mysite_prod/data/media 
<Directory /home/ashish/deployments/mysite_prod/data/media> 
Require all granted 
</Directory> 

<Directory /home/ashish/deployments/mysite_prod/mysite/mysite> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

</VirtualHost> 
WSGIPythonPath /home/ashish/deployments/mysite_prod/mysite:/home/ashish/.virtualenvs/mysite_prod/lib/python2.7/site-packages 

Ale jestem coraz wewnętrzny błąd serwera przy użyciu tej apache conf. Uważam, że wynika to z użycia WSGIPythonPath dwa razy w konflikcie. WSGIPythonPath nie może być zawarte wewnątrz wirtualnego hosta. Jak uruchomić dwa diff django projektu na diff virtualenv na apache?

Odpowiedz

1

Oto przykład tego, jak to robię. Będziesz musiał zmienić ścieżki/nazwy projektu na podstawie konfiguracji, naturalnie (przykładem jest SSL na porcie 443, ale działa na porcie 80, jak również):

LoadModule wsgi_module modules/mod_wsgi.so 
LoadModule ssl_module modules/mod_ssl.so 

WSGISocketPrefix /var/run/wsgi 

NameVirtualHost *:443 
Listen 443 
<VirtualHost *:443> 

    ServerName your.server.com 
    ErrorLog /home/user/apache_errors.log 

    WSGIDaemonProcess project1-https python-home=/home/user/.virtualenvs/project1 
    WSGIScriptAlias /project1 /var/www/html/project1/project1/wsgi.py process-group=project1-https application-group=project1-https 
    WSGIProcessGroup project1-https 
    Alias /project1/static/ /var/www/html/project1/static/ 

    WSGIDaemonProcess project2-https python-home=/home/user/.virtualenvs/project2 
    WSGIScriptAlias /project2 /var/www/html/project2/project2/wsgi.py process-group=project2-https application-group=project2-https 
    WSGIProcessGroup project2-https 
    Alias /project2/static/ /var/www/html/project2/static/ 
</VirtualHost> 

virtualenv dba o wykonywalnego i ścieżki Pythona po skonfigurowaniu w ten sposób.

+2

Twój 'dyrektyw WSGIProcessGroup'' nie są potrzebne, jak użyć opcji' 'procesowego group'' do' 'WSGIDaemonProcess''. Ta ostatnia '' WSGIProcessGroup'' w rzeczywistości i tak nadpisałaby pierwsze i nie zrobiłaby tego, czego się spodziewałeś. Powinieneś także ustawić opcję '' application-group'' na ''% {GLOBAL} '', jeśli jest to tylko aplikacja w tej grupie procesów. Pozwala to uniknąć problemów z niektórymi modułami rozszerzeń C stron trzecich w Pythonie. Należy również pamiętać, że jeśli masz 80/443, nie musisz używać oddzielnej grupy procesów dla 443. Może ona odwoływać się do tej z wcześniejszego portu 80 '' VirtualHost''. –

+2

Wow, prosto z ust konia! Dziękuję, że jesteście tak zaangażowani w SO, to jest naprawdę pouczające, aby mieć autorytet źródłowy w odniesieniu do mod_wsgi. Bardzo doceniane! – FlipperPA