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:
La aplicación que contiene los modelos de mi base de datos para el CMS se llama "webcontent".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()
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:
Pero el mensaje de error es el siguiente: (imágen)from webcontent.models import * # Línea 9 de mi archivo admin.py
(Notar que este error ocurre en la línea 9 de admin.py)
Les dejo el traceback que me deja django:
Código:
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.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
Les adjunto INSTALLED_APPS de Settings.py:
Código:
También les dejo urlpatterns de url.py: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' )
Código:
Por último les dejo el árbol del sistema de archivos que abarca mi proyecto django: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') ), )
(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!