Ver Mensaje Individual
  #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