/ / Django com apache e wsgi lançam o ImportError - python, django, apache, wsgi

Django com apache e wsgi lançam o ImportError - python, django, apache, wsgi

Estou tentando implantar meu aplicativo Django em um Apacheservidor sem sorte. Eu obtive êxito com o aplicativo de amostra WSGI e tentei hospedar um projeto Django vazio. Enquanto ele funciona corretamente com o manage.py runserver, ele gera o seguinte erro ao usar o apache:

[notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u9 mod_python/3.3.1 Python/2.7.3 mod_wsgi/2.7 configured -- resuming normal operations
[error] [client x.x.x.x] mod_wsgi (pid=8300): Exception occurred processing WSGI script "/usr/local/www/django/myapp/wsgi.py".
[error] [client x.x.x.x] Traceback (most recent call last):
[error] [client x.x.x.x]   File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 187, in __call__
[error] [client x.x.x.x]     self.load_middleware()
[error] [client x.x.x.x]   File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 44, in load_middleware
[error] [client x.x.x.x]     for middleware_path in settings.MIDDLEWARE_CLASSES:
[error] [client x.x.x.x]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 54, in __getattr__
[error] [client x.x.x.x]     self._setup(name)
[error] [client x.x.x.x]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 49, in _setup
[error] [client x.x.x.x]     self._wrapped = Settings(settings_module)
[error] [client x.x.x.x]   File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 132, in __init__
[error] [client x.x.x.x]     % (self.SETTINGS_MODULE, e)
[error] [client x.x.x.x] ImportError: Could not import settings "myapp.settings" (Is it on sys.path? Is there an import error in the settings file?): No module named myapp.settings

Meu wsgi.py é o seguinte:

"""
WSGI config for myapp project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
"""

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Eu tenho um wsgi.conf na biblioteca conf.d para o apache:

<VirtualHost *:80>
ServerName myapp.example.com
ServerAlias myapp
ServerAdmin admin@example.com
DocumentRoot /var/www

<Directory /usr/local/www/django>
Order allow,deny
Allow from all
</Directory>

WSGIDaemonProcess myapp processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup myapp

WSGIScriptAlias /myapp /usr/local/www/django/myapp/wsgi.py
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

</VirtualHost>

WSGIPythonPath /usr/local/www/django/myapp

[RESOLVIDO] Obrigado, eu comecei tudo de novo, feitoas modificações sugeridas nos meus arquivos de configuração, e agora está funcionando. Eu não pude sinalizar as duas sugestões corretas, mas acho que ambas foram necessárias e eu tive um terceiro (quarto, quinto ...) bug para, que foi afastado após a reinstalação.

Respostas:

2 para resposta № 1

Parece que você está usando um guia antigo para configurar o apache2 / wsgi. Eu recomendo usar o guia oficial em https://code.google.com/p/modwsgi/wiki/InstallationInstructions

De qualquer forma, o seu problema específico é que o aplicativo wsgi não está pegando o caminho python corretamente. Mude seu VirtualHost conf para algo como isto

<VirtualHost *:80>
ServerName myapp.example.com
ServerAlias myapp
ServerAdmin admin@example.com

DocumentRoot /usr/local/www/django/myapp
WSGIDaemonProcess myapp processes=2 threads=15 display-name=%{GROUP} python-path=/usr/local/www/django/myapp:/path/to/system/python/site-packages
WSGIProcessGroup myapp
WSGIScriptAlias / /usr/local/www/django/myapp/wsgi.py

<Directory /usr/local/www/django/myapp>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
</VirtualHost>

1 para resposta № 2

Seu arquivo de configurações está em/usr/local/www/django/myapp/settings.py, mas você "setou o PythonPath para / usr / local / www / django / myapp e então ajustou DJANGO_SETTINGS_MODULE para" myapp.settings "- que só seria adequado se settings estava em myapp / myapp / settings.Detire uma dessas referências para "myapp".