Sube tu projecto Django a Heroku en 7 pasos

Paso #1 - Instalar las librerias necesarias

Con tu entorno virtual activado instala lo siguiente:

(myvenv) $ pip install dj-database-url gunicorn whitenoise

Una vez que todas tus dependencias estén instaladas es importante crear el archivo requirements.txt para que Heroku pueda instalar estas mismas dependencias:

(myvenv) $ pip freeze > requirements.txt

Hace falta instalar también psycopg2 para que Heroku pueda utilizar su propia base de datos postgreSQL, y hay dos maneras de instalar esto, puedes asegurarte de tener instalado postgreSQL de forma local y despues ejecutar:

(myvenv) $ pip install django-toolkit psycopg2

o si no quieres instalar postgreSQL de forma local, basta con que abras el archivo requirements.txt y agregues hasta el final psycopg2==2.6.2

Paso #2 - El Procfile

Heroku necesita saber que tipo de app es la nuestra y cómo ejecutarla para eso creamos el archivo Procfile si, así sin extención y con mayúscula dentro de nuestro proyecto y agregamos al archivo la siguiente linea:

web: gunicorn miSitio.wsgi  

obviamente miSitio es el nombre de tu proyecto (así como aparece en tu archivo wsgi)

Como puedes vez también necesitamos tener en nuestro archivo requirements.txt gunicorn si instalaste django-toolkit ya deberías tenerlo instalado en tu entorno virtual, pero si no basta con ejecutar lo siguiente:

(myvenv) $ pip install gunicorn

y no olvidemos nuevamente actualizar requirements.txt así:

(myvenv) $ pip freeze > requirements.txt
Paso #3 - El archivo runtime.txt

Ahora necesitamos decirle a Heroku que versión de python estamos usando.
Vamos a crear otro archivo dentro de nuestro proyecto llamado runtime.txt
y le agregamos la siguiente linea:

python-3.5.2  

si estás trabajando con python 2 puedes especificar python-2.7.13 en vez del anterior

Paso #4 - Modificamos nuestro settings.py

hay que cambiar un par de cosas para que nuestro proyecto funcione correctamente en Heroku.

Primero agregaremos estas lineas hasta el final de nuestro archivo settings.py:

# Update database configuration with $DATABASE_URL.
import dj_database_url  
db_from_env = dj_database_url.config(conn_max_age=500)  
DATABASES['default'].update(db_from_env)  

con esto Heroku podrá utilizar su propia base de datos postgreSQL, al mismo tiempo que optimiza la conexión

Después agregamos estas lineas justo debajo:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')  
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (  
    os.path.join(BASE_DIR, 'static'),
)

Esto le permitirá a Heroku encontrar nuestros archivos estáticos y mostrar nuestra app correctamente

Y por último agregamos esta linea debajo de lo anterior:

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
Paso #5 - Modificamos nuestro wsgi.py

Agregamos 2 lineas al final del archivo:

from whitenoise.django import DjangoWhiteNoise  
application = DjangoWhiteNoise(application)  

el archivo queda de esta forma:

import os  
from django.core.wsgi import get_wsgi_application  
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "miSitio.settings")  
application = get_wsgi_application()  
from whitenoise.django import DjangoWhiteNoise  
application = DjangoWhiteNoise(application)

Recuerda, miSitio es el nombre de tu proyecto

Paso #6 - Creamos el proyecto en Heroku

Para esto necesitamos instalar el Heroku CLI con el siguiente comando si estás en mac:

brew install heroku  

Si estas en Windows o Linux, aquí estan las ligas para descargar el instalador

Una vez instalado el CLI de Heroku ejecutamos el comando:

(myvenv) $ heroku create

Si es la primera vez que usas Heroku deberás abrir sesión primero con el comando heroku login

Una vez que se haya creado un proyecto nuevo aparecerá el nombre en la consola junto con un link donde estará hospedada tu aplicación.

Paso #7 - Hacemos Push a Heroku

Estamos listos para subir nuestro proyecto a Heroku, para ello hacemos commit de todo lo que hasta ahora hemos trabajado:

(myvenv) $ git add -A
(myvenv) $ git commit -m "listos"
(myvenv) $ git push heroku master

Nota: si no haz inicializado git primero ejecuta git init

Super importante que te encuentres en tu Master Branch, pues no se puede subir a heroku de otras ramas además de la Master

Una vez que Heroku termine de configurar tu proyecto puedes abrirlo en el navegador con el comando:

(myvenv) $ heroku open

¡Felicidades lo haz logrado!

Resolución de errores comunes:

1.- Si aparece un error al ejecutar collect static esto puede deberse a que no existe una carpeta static dentro del proyecto, asrgurate de crear una carpeta static y ponerle un archivo cualquiera dentro esto puede ser algo así: static/file.txt

extras

Si quieres agregar tu dominio personalizado a heroku puedes hacerlo con los siguientes comandos:

(myvenv) $ heroku domains:add www.example.com
(myvenv) $ heroku domains