Foros del Web » Programando para Internet » Python »

Django WSGI Apache: Problemas al importar módulos

Estas en el tema de Django WSGI Apache: Problemas al importar módulos en el foro de Python en Foros del Web. Hola gente, quizás este sea un problema recurrente que les ocurre a los que se inician con django cuando pasan a la etapa de producción. ...
  #1 (permalink)  
Antiguo 04/02/2012, 01:57
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Django WSGI Apache: Problemas al importar módulos

Hola gente, quizás este sea un problema recurrente que les ocurre a los que se inician con django cuando pasan a la etapa de producción.

Hace un par de días programé un CMS para una página web usando la herramienta admin que incluye django y extendiendo este con admin_tools, todo funciona perfecto en el servidor de desarrollo, el problema ocurre al correrlo en mi servidor propio de producción.

Uso (todo 64 bits):
- WAMP Server (con Apache 2.2)
- WSGI (Módulo de 64 bits también)
- Python 2.7.2
- Django 1.3.1
(Ya tengo instalado el módulo MySQL para python)

para poder servir aplicaciones escritas en Python desde Apache.
Tengo el módulo apache WSGI instalado y funcionando correctamente.

La carpeta pública de mi servidor está exactamente en:
C:/Users/Diego/Desktop/Server


en donde en esa carpeta dentro de la carpeta "proyectos" manejo todos mis proyectos web que pueden ser accedidos desde fuera. El proyecto web (no django) en particular en el que trabajo de llama "geo", en donde mi proyecto django se encuentra en la carpeta "admin" dentro de geo, es decir, la ruta absoluta a mi proyecto django es: C:/Users/Diego/Desktop/Server/proyectos/geo/admin

El archivo .wsgi para correr el servidor django está dentro de la carpeta "apache" del proyecto django, el cual se llama "django", su ruta absoluta es: C:/Users/Diego/Desktop/Server/proyectos/geo/admin/apache/django.wsgi
(Disculpen por repetir tanto "django")

En el archivo httpd.conf de apache tengo la siguiente línea:

Código:
WSGIScriptAlias /proyectos/geo/admin "C:\Users\Diego\Desktop\Server\proyectos\geo\admin\apache\django.wsgi"

<Directory "C:\Users\Diego\Desktop\Server\proyectos\geo\admin\apache">
	Order deny,allow
	Allow from all
</Directory>

El contenido de este archivo es:


Código:
import os, sys, django.core.handlers.wsgi

project_path = 'C:\Users\Diego\Desktop\Server\proyectos\geo'

if project_path not in sys.path:
	sys.path.append( project_path )
	sys.path.append( project_path + '\admin' )

os.environ[ 'DJANGO_SETTINGS_MODULE' ] = 'admin.settings'
application = django.core.handlers.wsgi.WSGIHandler()
La aplicación que contiene los modelos de mi base de datos para el CMS se llama "webcontent".

Para acceder públicamente a mi servidor sincronizo apache con DynDNS, en donde el dominio que apunta a mi dirección IP es: diegoulloa.dyndns.org

Al acceder públicamente a la aplicación de administración de django por la dirección:

http://diegoulloa.dyndns.org/proyectos/geo/admin
(Notar que el proyecto django está dentro de una de las carpetas hijas de la pública del servidor. Sé que no es seguro)

ocurre un problema de importación de módulos desde mi módulo "Admin.py", en donde trato de importar todos los modelos de mis tablas de la base de datos.

La sentencia para importar los modelos es la siguiente:

Código:
from webcontent.models import * # Línea 9 de mi archivo admin.py
Pero el mensaje de error es el siguiente: (imágen)



(Notar que este error ocurre en la línea 9 de admin.py)

Les dejo el traceback que me deja django:

Código:
Environment:


Request Method: GET
Request URL: http://diegoulloa.dyndns.org/proyectos/geo/admin/

Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'admin_tools',
 'admin_tools.theming',
 'admin_tools.menu',
 'admin_tools.dashboard',
 'django.contrib.admin',
 'admin.webcontent']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  101.                             request.path_info)
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in resolve
  250.             for pattern in self.url_patterns:
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _get_url_patterns
  279.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _get_urlconf_module
  274.             self._urlconf_module = import_module(self.urlconf_name)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Users\Diego\Desktop\Server\proyectos\geo\admin\urls.py" in <module>
  6. admin.autodiscover()
File "C:\Python27\lib\site-packages\django\contrib\admin\__init__.py" in autodiscover
  26.             import_module('%s.admin' % app)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Users\Diego\Desktop\Server\proyectos\geo\admin\webcontent\admin.py" in <module>
  9. from webcontent.models import *

Exception Type: ImportError at /
Exception Value: No module named webcontent.models
Creo que tiene que ver con un problema de rutas. Esta es mi primer proyecto en django y mi único proyecto en mi servidor (por ahora no necesito manejar varios proyectos). Todos los directorios dentro de la carpeta de mi proyecto "admin" tienen el archivo __init__.py para que se reconozca como un módulo python.

Les adjunto INSTALLED_APPS de Settings.py:
Código:
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    # 'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Admin Tools for Django Apps:
    'admin_tools',
    'admin_tools.theming',
    'admin_tools.menu',
    'admin_tools.dashboard',
    # Default Django Admin App:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'admin.webcontent'
)
También les dejo urlpatterns de url.py:
Código:
from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'admin.views.home', name='home'),
    # url(r'^admin/', include('admin.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url( r'^admin/', include(admin.site.urls) ),
    url( r'^admin_tools/', include('admin_tools.urls') ),
)
Por último les dejo el árbol del sistema de archivos que abarca mi proyecto django:



(El archivo .htaccess está vacío por ahora)

Espero que esta documentación sea suficiente para que puedan ayudarme a determinar la fuente del problema y quizás una posible solución.

Espero con esperanza alguna ayuda hahaha, ya que me he pasado estos últimos días buscando información y cosas en internet (casi todo en inglés) y no logro hallar una solución a mi problema, esto me tiene loco, ya casi tiro la toalla, pero no me queda nada más que seguir buscando...

Espero que me puedan ayudar con esto, espero cualquier tipo de respuestas y preguntas.

Muchas gracias por tomarse el tiempo de leer mi problema.
Estamos en contacto!

Última edición por de-troit; 04/02/2012 a las 04:11
  #2 (permalink)  
Antiguo 04/02/2012, 04:51
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Django WSGI Apache: Problemas al importar módulos

Acabo de solucionarlo, bastó con cambiar en la ruta de módulos la ubicación del módulo "models" en el archivo admin.py

Cambié de:
Código:
from webcontent.models import * # Linea 19
a:
Código:
from models import * # Linea 19
Era algo obvio, pero pensé que era necesario anteponer el nombre de la aplicación, pero como admin.py y models.py están ubicado dentro del mismo directorio de módulos, al sí anteponerlo me generaba este problema.

También cambié hice modificaciones a las urls de urlpatterns.py: (por conveniencia, no para solucionar el problema)
Código:
from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'admin.views.home', name='home'),
    # url(r'^admin/', include('admin.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url( '', include(admin.site.urls) ),
    url( r'^admin_tools/', include('admin_tools.urls') ),
)
(Dejé que al entrar al directorio raíz donde escucha wsgi, se mostrara inmediatamente el admin)

El problema anterior ya está solucionado

Pero ahora tengo otro problema, no se muestran los estilos ni las imágenes, creo que ahora debo configurar algo del ADMIN_MEDIA_PREFIX (no lo tengo claro, es mi 1º app en django), ahora estoy tratando de solucionar esto.

Muchas gracias, espero ayuda debido a este último problema.
Saludos!

Última edición por de-troit; 04/02/2012 a las 05:02
  #3 (permalink)  
Antiguo 04/02/2012, 07:23
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Django WSGI Apache: Problemas al importar módulos

Problema de static files arreglado

Bastó con asignar:

Código:
STATIC_ROOT = '/static/'
y correr el siguiente comando en la consola:

Código:
 python manage.py collectstatic
(Con esto guardé las dependecias - recursos que usa la app)

Y luego asigné un alias en la conf de apache:

Código:
Alias /static C:\Users\Diego\Desktop\Server\proyectos\geo\admin\static
Reinicié apache y todo funcionaba a la perfección. Problema arreglado.
Muchas gracias de todas formas, valió la pena seguir intentando hasta la muerte hahaha.

Saludos!
  #4 (permalink)  
Antiguo 04/02/2012, 20:53
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 5 meses
Puntos: 55
Respuesta: Django WSGI Apache: Problemas al importar módulos

pues solo felicitarte por el tesón y por la calidad del reporte del problema... lo envió a marcadores como referencia
  #5 (permalink)  
Antiguo 05/02/2012, 00:36
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Django WSGI Apache: Problemas al importar módulos

Muchas gracias mcun, traté de documentarlo lo mejor posible en el tiempo que tenía. Menos mal que ya está todo el rollo solucionado.

Saludos!

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:23.