Desplegar aplicación Rails en Heroku
Publicado el Martes, 11 de octubre de 2011Recientemente tuve que desplegar una aplicación Rails en Heroku, la conocida plataforma de aplicaciones en la nube. El servicio ofrece despliegue simple de aplicaciones Ruby, Node.js, Clojure, Java, Python, y Scala. Es prácticamente instantáneo, ya que la única herramienta que necesitamos para hacer el deploy es git.
Ejecutando un git push al servidor en heroku, la aplicación se actualiza y ejecuta. Contamos además con una gema para interactuar con el servidor desde la línea de comando. Es un servicio realmente práctico y muy ágil de usar.
Si bien es bastante simple manejarse una vez que leemos la guía para empezar, mi despliegue se vió demorado por algunos obstáculos. A continuación listo los errores con los que me tropecé, y las soluciones que encontré para solucionarlos.
Problema con adaptador PostgreSQL al ejecutar rake db:migrate
[fernando@hoth twitter]$ heroku rake db:migrate
rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)
Tasks: TOP => db:migrate => db:load_config(See full trace by running task with --trace)
La respuesta la encontré en StackOverflow, y lo que comprendí es lo siguiente: Por defecto las aplicaciones Rails usan sqlite para el ambiente development. Heroku ejecuta nuestra aplicación en el ambiente de producción, y genera un archivo database.yml que utiliza PostgreSQL. Por esto, tenemos que agregar la gema correspondiente a nuestro proyecto en el archivo Gemfile:
group :production do gem 'pg' end
Ahora, cuando ejecutemos bundle install en local, no es necesario tener instalado PostgreSQL, porque podemos usar un parámetro para que se saltee las gemas del ambiente de producción:
bundle install --without production
Después de commiteado y pusheado esto, ejecutar heroku rake db:migrate
nuevamente, y debería funcionar.
ActionView::Template::Error (application.css isn't precompiled)
Otro error que encontré por falta mía. Rails 3.1 introdujo el Assets Pipeline, un framework para concatenar y comprimir los recursos JavaScript y CSS. También permite escribir estos recursos en lenguajes como CoffeScript, Saas y ERB.
Rails integró Sprockets, una biblioteca Ruby dedicada a esta funcionalidad, de manera que los desarrolladores se benefician del poder de tener sus recursos pre procesados, comprimidos y "minified" (no conozco un término en español para esto) con una biblioteca central.
Heroku soporta el assets pipeline en su stack Cedar. Para más información pueden leer este enlace.
En mi caso seguí la info en este otro enlace, diciéndole a producción que compile los recursos. Para eso, en el archivo config/environments/production.rb se cambia el siguiente valor de false a true:
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
Después de esto, con un git commit, un git push a Heroku y la aplicación quedó funcionando. Pueden usar heroku logs
desde la línea de comandos para detectar cualquier problema que esté evitando que su aplicación funcione correctamente.
Cristina 26 junio. 2012 - 13:09
Muchas gracias por el aporte, en el foro de refineryCMS no encontraba nada que funcionara 😉
Carlos 15 agosto. 2012 - 02:25
Gracias tio te pasaste