2015-09-03 2 views
0

После обновления до jessie мой django перестает работать. Я обнаружил, что проблема в mod_python, поэтому я решил, что это хорошая причина для перехода на mod_wsgi. Я читал this, но я не знаю, что делать, если я получил больше, чем один проект:переход от mod_python в mod_wsgi (несколько проектов)

Я получил несколько проектов в/домашней папке:

  • /дома/project1
  • /дома/project2
  • /дома/project3

http.conf моего сервера Apache (не мигрировали до 2.4 еще, поэтому, пожалуйста, игнорируйте Order/разрешения и т.д.)

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    <Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
    </Directory> 
     <Location "/project1"> 
     SetHandler python-program 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE project1.settings 
     PythonInterpreter project1 
     PythonOption django.root /project1 
     PythonDebug On 
     PythonPath "['/home', '/home/project1'] + sys.path" 
     </Location> 
     <Location "/project2"> 
     SetHandler python-program 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE project2.settings 
     PythonInterpreter project2 
     PythonOption django.root /project2 
     PythonDebug On 
     PythonPath "['/home', '/home/project2'] + sys.path" 
     </Location> 
     <Location "/project3"> 
     SetHandler python-program 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE project3.settings 
     PythonInterpreter project3 
     PythonOption django.root /project3 
     PythonDebug On 
     PythonPath "['/home', '/home/project3'] + sys.path" 
     </Location> 


     Alias /admin_media/ /usr/share/pyshared/django/contrib/admin/media/ 
     Alias /static/ /home/common/ 

     ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
     <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
    Order allow,deny 
    Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

Я думаю о режиме демона, но как использовать его для разных проектов ???

Update Согласно @ GrahamDumpleton Ответим мой новый апач выглядит следующим образом:

ServerAdmin [email protected]

DocumentRoot /var/www 
<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
</Directory> 
<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Require all granted 
</Directory> 
WSGIDaemonProcess project1 
WSGIDaemonProcess project2 
WSGIDaemonProcess project3 


WSGIScriptAlias /project1/ /home/project1/wsgi.py process-group=project1 
WSGIScriptAlias /project2/ /home/project2/wsgi.py process-group=project2 
WSGIScriptAlias /project3/ /home/project3/wsgi.py process-group=project3 


<Directory /home/*> 
    Require all granted 
</Directory> 

Alias /admin_media/ /usr/share/pyshared/django/contrib/admin/media/ 
Alias /static/ /home/common/ 

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
<Directory "/usr/lib/cgi-bin"> 
    AllowOverride None 
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
    Require all granted 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 
</VirtualHost> 

Сейчас он работает - Спасибо

ответ

1

Поскольку ваши проекты все в отдельных под URL-адресах, просто используйте несколько директив WSGIScriptAlias, по одному для каждого URL-адреса. И определенно используйте группу процессов демона для каждого отдельного экземпляра Django.

Для некоторого дополнительного Престола чтения:

Есть также mod_wsgi документы, хотя они находятся в небольшом беспорядке прямо сейчас.

+0

WSGIApplicationGroup? Это бесполезно для меня? –

+1

Если вы используете '' WSGIScriptAlias' для всего и '' process-group'' опция всегда используется с ней, то да, '' WSGIProcessGroup'' не требуется, поскольку опция '' process-group'' имеет приоритет для этого WSGI. BTW, так как у вас есть каждый в своей собственной группе процессов демона, также добавьте '' application-group =% {GLOBAL} '' в '' WSGIScriptAlias'' в конце. Это обеспечит использование контекста основного интерпретатора соответствующих процессов, что позволит избежать проблем с некоторыми сторонними модулями для Python, которые не работают в субиндиффуляторах. –

Смежные вопросы