Ir al contenido principal

Mac: Django con Apache

El problema

Lograr que un proyecto django pueda ser servido por apache.

Fue un poco difícil encontrar información precisa al respecto. Aquí trato de indicar los pasos que seguí. Ojalá te sirva de ayuda.

Escenario

  • Mac con OSX 10.10.1 (Yosemite)
  • Apache 2.4.9
  • Proyecto hecho con Django 1.7.3
    • mydjango_site
      • env
      • mydjango_project
        • manage.py
        • mydjango
          • static
          • views.py
        • project
          • settings.py
          • urls.py
          • wsgi.py

Idea

  • Puedo correr el proyecto django con su servidor incorporado:
    • $ cd mydjango_site
    • $ source env/bin/activate
    • $ cd mydjango_project
    • $ python manage.py runserver
  • Quiero que corra bajo apache
    • mod_wsgi permite que apache ejecute el proyecto

Pasos

instalar mod_wsgi

  • $ brew tap homebrew/apache
  • $ brew install mod_wsgi
  • $ sudo vim /etc/apache2/httpd.conf
    • Ubico la sección de carga de módulos y agrego:

      LoadModule wsgi_module /usr/local/Cellar/mod_wsgi/4.4.9/libexec/mod_wsgi.so

wsgi del proyecto

  • $ cd mydjango_project/project
  • $ vim wsgi.pi:

    import sys, os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    
    sys.path.append(BASE_DIR + "mydjango_project/project")
    sys.path.append(BASE_DIR + "env/lib/python2.7/site-packages")
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    
    
  • Las líneas resaltadas son un seteo de path que no viene por default. Son necesarias para proveer a mod_wsgi el path de los módulos python que necesita.

hosts

  • $ sudo vim /etc/hosts:

    127.0.0.1 mydjangosite.dev
    
    
  • Esto es para que la solicitud de acceso a ese hosts sea atendida por el localhost

virtualhost

  • La configuración del virtualhost permite la solicitud de acceso a cierto host sea servida con el contenido web de cierto directorio. Normalmente se sirve contenido estático. Con mod_php se suele servir contenido php sin hacer mayor configuración en esta parte. Sin embargo, con mod_wsgi es necesario hacer algunas indicaciones al respecto en la configuración de cada virtualhost que lo use. 
  • En /etc/apache2/httpd.conf, tengo esta línea:
    Include /private/etc/apache2/extra/httpd-vhosts.conf
  • $ cd /etc(apache2/extra (/private/etc y /etc parecen ser el mismo directorio)
  • En httpd-vhosts.conf tengo estas líneas:

    include /private/etc/apache2/extra/vhosts/localhost.conf
    include /private/etc/apache2/extra/vhosts/mydjangosite.dev.conf
    
    
  • $ cd vhosts
  • En mydjangosite.dev.conf:

    <VirtualHost *:80>
        LogLevel info
    
        ServerName mydjangosite.dev
        ServerAdmin akobashikawa@gmail.com
        
        ErrorLog "/Users/akobashikawa/Sites/logs/mydjangosite.dev-error_log"
        CustomLog "/Users/akobashikawa/Sites/logs/mydjangosite.dev-access_log" common
    
        # Static files
        DocumentRoot "/Users/akobashikawa/Sites/django/mydjango_site/mydjango"
        Alias /static/ /Users/akobashikawa/Sites/django/mydjango_site/mydjango_project/mydjango/static/
    
        <Directory "/Users/akobashikawa/Sites/django/mydjango_site/mydjango_project/mydjango/static">
            Require all granted
        </Directory>
    
        # WSGI configuration
    
        WSGIDaemonProcess mydjangosite.dev python-path=/Users/akobashikawa/Sites/django/mydjango_site/mydjango_project/project:/Users/akobashikawa/Sites/django/mydjango_site/env/lib/python2.7/site-packages
    
        WSGIProcessGroup mydjangosite.dev
        
        WSGIScriptAlias / /Users/akobashikawa/Sites/django/mydjango_site/mydjango_project/project/wsgi.py
    
        <Directory "/Users/akobashikawa/Sites/django/mydjango_site/mydjango_project/project">
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
        
    </VirtualHost>
    
    • Hasta que este archivo de configuración no estuvo correctamente seteado, obtuve errores (podía ver el log en /Users/akobashikawa/Sites/logs/mydjangosite.dev-error_log). Me ayudó mucho http://stackoverflow.com/a/22477904.
      • Un error que tenía era usar Order allow, deny (la notación antigua); en la notación nueva es Require all granted.
      • Otro error era que el wsgi.py que viene por default no tenía los seteos de path que mod_wsgi requiere.
  • $ sudo apachectl config test
  • $ sudo apachectl start
  • Acceder a http://mydjangosite.dev

Referencias

Entradas populares de este blog

Cómo abrir un balde de pintura

Cómo abrir un balde de pintura Estuve como media hora intentando palanquear con un desarmador y hasta de cortar parte de la tapa con una cuchilla. Entonces tome un pequeño alicate y jalé uno de los extremos donde había cortado. Me dí cuenta que la parte inferior del borde de la tapa era un sello de seguridad que puede ser jalado. Lo jalé con el alicate alrededor del borde. Quitado el sello, fue relativamente fácil usar las manos para abrir la tapa.

Pizarra acrílica casera y portátil

Pizarra acrílica casera y portátil El papel contact es auto adhesivo y tiene múltiples usos en arte, decoración, etc.
Busqué papel contact transparente porque quiero hacer el enmicado casero de unas tarjetas de juego, sobre las que hay que hacer anotaciones que se puedan borrar fácilmente.
Se me ocurrió que podrían funcionar bien unos marcadores para pizarra.
Descubrí que con marcadores de pizarra se puede escribir muy bien sobre el papel contact. Lo escrito permanece y se borra con la misma facilidad que en una pizarra acrílica. Eureka :-D
Se puede pegar el papel contact en una superficie plana, como una pared, el lado de la refrigeradora, en un biombo, etc, etc y tener fácilmente el equivalente a una pizarra acrílica, por un costo mucho, mucho menor.


Además, por ser transparente, se puede colocar debajo papel de colores, cuadriculado, o con otro diseño que te resulte útil.
Podrías llevarte el papel y tener así una pizarra portátil.
Si tuvieras una pizarra antigua, de las que usan t…

Root y Link2SD para Galaxy S3 Mini (GT-I8190L)

Root y Link2SD para Galaxy S3 Mini (GT-I8190L)Consideraciones previas:El proceso de rooteo aquí descrito se supone que no es destructivo, pero siempre es recomendable hacer un backup, principalmente de la información más importante.El proceso puede tardar como 10 minutos. Asegurarse que la batería del celular tenga una buena cantidad de carga (yo lo hice con 20% aunque se recomienda 80%).Tener a mano el cable de conexión USB para conectar el celular a la PC (pero no conectarlo hasta que la guía lo indique).Que en el celular esté activado el modo de depuración.Tener activa la conexión a Internet en la PC.Puede ser que si está instalado una versión antigua de Kies, Odin no reconozca al dispositivo. (A mi me pasó, pero el inconveniente es salvable. Desinstalé Kies y los drivers asociados y más bien instalé los drivers usando el mini toolkit.)Ver las guias completas antes de realizar los pasos.Este post es sólo con fines educativos. La responsabilidad de la ejecución es tuya.Ejecutar Sam…