[HowTo] Deploy Gratuito de Rails + Mongoid en Heroku


Trabajar con Rails y Mongoid es la combinación ganadora si quieres ser productivo y además divertirte mientras programas. Hace tiempo les hablé de cómo subir una aplicación rails de esas que ocupan tablas SQL al famoso servicio de hosting para webapps Heroku. El día de hoy aprenderemos cómo hacerlo si quieres utilizar Mongoid (¡Backend de MongoDB en nuestra app!), y de paso les hablaré del Heroku Toolbelt:

1) Heroku Toolbelt

Resulta que la gema "heroku" para Rails ya no está soportada y en lugar de estar segregando las herramientas de la plataforma en varios esfuerzos diferentes ahora el Heroku Team ha decidido hacer una "unisolución", conocida como el "Heroku Toolbelt".

Si queremos subir nuestra app a heroku, (sea la que sea) ocuparemos instalarnos esta utilidad (y quitar la gema heroku de la misma si la ocupábamos). Instalarlo es bastante sencillo a decir verdad y es un proceso prácticamente automático y multiplataforma, aquí les explicaré cómo instalarlo de forma genérica, especialmente enfocado a sistemas linux (excluyendo Ubuntu, pues con esta distro tenemos otro método); Corremos el siguiente comando:

wget -qO- https://toolbelt.heroku.com/install.sh | sh

Y luego añadimos lo siguiente a nuestro ".bashrc" (archivo oculto dentro de nuestra carpeta personal):

PATH="/usr/local/heroku/bin:$PATH"

Finalmente, cerramos y abrimos la consola (la reiniciamos pues); Una vez hecho esto lo tenemos instalado. Configuramos nuestras claves SSH con su servidor y listo.

2) Preparando el entorno

Primero y antes que nada, bájate la más nueva versión de bundler así:

gem install bundler --pre

Luego, dile a tu gemfile explícitamente que use ruby 1.9.3 así:


Ya que estemos usando explícitamente ruby 1.9.3 en el Gemfile, corremos:

1. bundle install
2. git init
3. git add .
4. git commit -m "Heroku ready"
5. heroku login
6. heroku create myapp
7. heroku addons:add mongohq:small

Y eso hará el bundle de las gemas, inicializará un repo git dentro de la app (Que en este caso tiene de nombre "myapp") y añadirá todo el código hasta donde vamos para luego crear una "instancia de app" de heroku y finalmente instalar la extensión que nos va a permitir usar MongoDB dentro de heroku como nuestra base de datos; Cabe destacar que el uso de esta extensión requiere de una cuenta verificada de heroku (con una tarjeta de crédito asociada) y el comando 6 inicializa la add-on en la versión Small de la base de datos proveída por MongoHQ, cosa que quizá quieras cambiar según la envergadura del proyecto.

Links útiles en esta parte:


3) Configuración y Deploy

Una vez tengamos el paso de arriba configurado y listo, proseguimos añadiendo a nuestro archivo config/mongoid.yml algo como:

production:

  sessions:
    default:
      uri: <%= ENV['MONGOHQ_URL'] %>
      options:
        skip_version_check: true
        safe: true

Guardamos y corremos los siguientes comandos:

1. rake assets:precompile
2. rails s -e production

Si salen errores, vemos el log de la consola y los corregimos. Abrimos nuestro navegador en el http://localhost:3000 habitual de rails y checamos que todo funcione como se espera... Recordemos que si teníamos records en la base de datos que usábamos para development y estos no están en la de producción es posible que las cosas fallen, hagan su dump de mongo primero antes de hacer el deploy y luego (ya con la app arriba) hagan el restore para evitar esto una vez colgados en heroku.

NOTA: Ocuparás tu URI de acceso MongoHQ para sacar datos como tu usuario, contraseña y servidor en caso de hacer el proceso de dump/restore ya en la nube. Estos datos se obtienen con el comando heroku config.

Finalmente con el comando:

git push heroku master

subimos todo a heroku y abrimos la aplicación con heroku open. Si todo está bien, hemos terminado! y si no, tendremos que revisar nuestros logs con heroku logs y tras corregir errores, reiniciar el servidor con heroku restart.