Publica tu aplicación en línea con Heroku

Created by Terence Lee, @hone02

Instalando Heroku

Sigue los pasos 1 hasta el 3 de quickstart guide para crear una cuenta, instalar el Heroku Toolbelt e ingresar.

Coach: Hable acerca de los beneficios de Heroku vs servidores tradicionales para la implementación.

Preparando tu aplicación

Version Control Systems

Necesitamos agregar nuestro código a un controlador de versiones. Para ello vamos a usar GIT.

git init
echo "public/uploads" >> .gitignore
echo "tmp" >> .gitignore
echo "logs" >> .gitignore
git add .
git commit -m "initial commit"

Coach: Este es un buen momento para hablar de sistemas de control de versiones y git, también explicar el .gitignore y porqué no queremos estos archivos incluidos.

Actualizando nuestra base de datos

Primero, necesitamos conseguir nuestra base de datos para trabajar en Heroku, el cual usa una base de datos diferente. Por favor cambiar lo siguiente en el Gemfile:

gem 'sqlite3'

a

group :development do
  gem 'sqlite3'
end
group :production do
  gem 'pg'
end

Ejecute bundle install --without production para configurar sus dependencias.

Coach: Puedes hablar acerca de RDBMS y las diferencias con otros sistemas de almacenamiento.

Agregando rails_12factor

Después, necesitamos agregar rails_12factor a nuestro Gemfile para hacer que nuestra app esté disponible en Heroku.

Esta gema modifica la manera en que Rails funciona, para que se adecue a Heroku. Por ejemplo, el loggeo es actualizado y la configuración de activos estáticos (imágenes, archivos CSS y javascript) es modificada para trabajar apropriadamente dentro de los sistemas de Heroku.

Por favor cambia lo siguiente en el Gemfile:

group :production do
  gem 'pg'
end

a

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

Después, ejecuta bundle, y a continuación haz un commit de los cambios al Gemfile.lock a tu repositorio:

git commit -a -m "Added rails_12factor gem and updated Gemfile.lock"

Coach: Puede hablar de loggearse a Heroku, también como sus otras particularidades.

Publicando tu aplicación

Creación de la aplicación

Necesitamos crear nuestra aplicación heroku digitando heroku create en la terminal y ver algo como esto:

Creating sheltered-refuge-6377... done, stack is cedar
http://sheltered-refuge-6377.herokuapp.com/ | git@heroku.com:sheltered-refuge-6377.git
Git remote heroku added

En este caso “sheltered-refuge-6377” es el nombre de la aplicación.

PUSHeando el código

Lo siguiente que necesitamos para hacer “push” (envío) de nuestro código a heroku es digitar git push heroku master. Verás la salida del push como lo siguiente:

Initializing repository, done.
Counting objects: 101, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (91/91), done.
Writing objects: 100% (101/101), 22.68 KiB | 0 bytes/s, done.
Total 101 (delta 6), reused 0 (delta 0)

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
-----> Installing dependencies using 1.6.3
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
       Fetching gem metadata from https://rubygems.org/..........
...
-----> Launching... done, v6
       http://sheltered-refuge-6377.herokuapp.com/ deployed to Heroku

El proceso se completa con éxito, cuando ves el texto “Launching …” como arriba.

Migrando la base de datos

Necesitamos migrar nuestra base de datos tal como lo hicimos localmente durante el evento: heroku run rake db:migrate

Cuando se termine de ejecutar el comando, puedes acceder a tu aplicación mediante su URL. Para esta aplicación de ejemplo, puedes ir a http://sheltered-refuge-6377.herokuapp.com/. También puedes digitar heroku open en la terminal para visitar la página.

Notas de cierre

La plataforma de Heroku no existe sin tener algunas particularidades. Las aplicaciones que se ejecutan en Heroku viven dentro de un ambien efímero, esto significa que (excepto por la información almacenada en tu base de datos), cualquier archivo creado por tu aplicación desaparecerá si ésta es reiniciada (por ejemplo, cuando pusheas una nueva versión).

Ephemeral filesystem

Cada dyno obtiene su propio sistema de archivos efímero, con una copia fresca del código más recientemente deployadp. Durante la vida de un dyno, sus procesos en ejecución pueden usar el sistema de archivos como un almacenamiento temporal, pero ningun archivo que es creado o guardado es visible a los procesos de cualquier otro dyno, y cualquier archivo escrito será descartado en el momento en el que el dyno sea detenido o reiniciado.

En la aplicación de tutorial, la habilidad de adjuntar archivos al registro de Idea crea nuevos archivos en el folder public/uploads de tu aplicación. El almacenamiento efímero en Heroku hará que actúe de la siguiente manera:

  1. Lanza la app con heroku open
  2. Agrega una nueva Idea con una imagen
  3. Reinicia la aplicación ejecutando heroku restart
  4. Regresa a tu Idea y vuelve a cargar la página, la imagen ya no debería ser visible
Trabajando alrededor del almacenamiento efímero

Obviamente esto no se ve útil si es que estuvieras corriendo una aplicación en la vida real, pero hay maneras de trabajar alrededor de esto utilizadas por varios sitios web populares.

El método más común es usar un servidor host externo para los activos, como Amazon S3 (Simple Storage Service) o Rackspace CloudFiles. Estos servicios proveen (por un bajo costo - usualmente menos de $0.10 por GB) almacenamiento ‘en la nube’ (lo que significa que potencialmente los archivos podrían estar almacenados en cualquier sitio). Tu aplicación sería capaz de usar esto como un almacenamiento persistente.

Mientras esta funcionalidad está un poco fuera del alcance de este tutorial, aquí hay algunos recursos disponibles que puedes usar para encontrar tu camino:

Como siempre, si requieres más información o asistencia, tus coaches serán capaces de ayudarte.