Blog sobre desarrollo de software

Ver más

Post etiquetado con rails

Hacer el despliegue -deployment -de una aplicación Rails a la Heroku

Ya en varias ocasiones, durante platicas o reuniones relacionadas con Ruby y con Rails, me han preguntado como hacer el despliegue de una aplicación Web hacia un servidor Linux. Generalmente mi respuesta rapida es “no te metas en problema, usa Heroku”.

La recomendación de Heroku es porque no nos tenemos que preocupar de instalar ni configurar nada, solo hacemos un push de nuestro repositorio Git y el proceso de Heroku se encarga de configurar todo para tener nuestra aplicación funcionando desde Internet en cuestión de minutos.

El “detalle” con Heroku, como me han comentado, es que cuesta, me dicen, “yo lo que quiero es configurar mi propio servidor linux y ejecutar la aplicación desde ahi”. Bueno en este caso, hay muchas “recetas” de como hacerle.

Generalmente todas estas “recetas” requieren de pasos de instalación de programas y librerías como servidor web, motor de base de datos, herramientas adicionales, etc. para dejar nuestro ambiente preparado para poder desplegar nuestra aplicación web.

Cuando finalmente tenemos nuestro entorno listo, el siguiente paso es configurar Capistrano, el cual requiere de una “receta” con los pasos a realizar para desplegar la aplicación a un servidor remoto. Estos pasos incluyen instrucciones por ejemplo de a que repositorio git conectarse para tener el código fuente, realizar migraciones de base de datos, ejecutar pasos adicionales de configuración etc.

Es algo feasible, pero requiere de un poco de esfuerzo y quizas un poco de frustraciones de vez en cuando, hasta que tenemos una solución que nos agrada para el despliegue de la aplicaciones la primera vez y los cambios subsecuentes.

Hace un par de dias, y por casi casualidad me tope con Gitpusshuten, el cual es una herramienta para hacer el despliegue de aplicaciones Ruby/Rails.

Lo interesante de Gitpusshuten es que hace que el proceso de despliegue a servidores Linux sea casi tan simple como lo hace Heroku.

Gitpusshuten inclusive puede instalar y configurar todo el software y herramientas necesarias para que nuestro servidor Linux funcione como Webserver, aun si nuestro servidor es una nueva instalación.

Definitivamente si están buscan opciones para montar sus propios servidores Linux y desplegar desde ahi las aplicaciones Ruby/Rails deben de darle una revisada a Gitpusshuten, ya que en cuestión de minutos les ayudara a tener su aplicación en linea funcionado.

Video de Webinar para JoeDayz sobre Ruby On Rails

El pasado 8 de febrero a invitación de JoeDayz presente un Webinar sobre Ruby On Rails. La presentación fue grabada y el video se puede descargar desde la pagina de JoeDayz.

El unico detalle con la grabación, es que esta codificada en Windows Media con el codec exclusivo de GoToMeeting - a traves de su servicio se llevo a cabo el Webinar -, lo que impide que usuarios de Linux y OSX puedan ver el video.

Descargue el video, lo codifique de manera diferente y lo subi al sitio de Vimeo. Para los interesados aqui esta:

Desarrollando con Ruby on Rails from Mario A Chavez on Vimeo.

Para quienes están interesados en aprender Ruby On Rails, ya anuncie un segundo RailsCamp.

RailsCamp - Nivel 1

Después del RailsCamp de Enero, algunas personas me han preguntado si es posible realizar un curso para nivel 1, es decir enfocado a personas que apenas están entrando a conocer este entorno de desarrollo.

Pues bien, por este medio lanzo la convocatoria para los interesados al proximo RailsCamp, este sera de 15 horas -casi- continuas de entrenamiento en 3 dias:
Dia 1 -Viernes- de 6pm a 10pm
Dia 2 -Sábado- de 9am a 4pm
Dia 3 -Sábado- de 9am a 4pm

La fecha y el lugar aun están por definirse, ya que aun estoy buscando un espacio disponible para llevar a cabo el RailsCamp, donde puedan participar 10 personas.

  • Los objetivos del RailsCamp son:
  • Entender la arquitectura MVC
  • Manejo de dependencias con Bundler
  • Migraciones y modelos
  • Relaciones de datos a través de los modelos
  • Vistas, Helpers y Layouts
  • El controlador, CRUD y REST
  • El uso de Mailers

El proceso consiste en ir explicando estos conceptos al mismo tiempo de ir construyendo una aplicación en Ruby on Rails.

El costo tentativo del RailsCamp es de 1,500.00 pesos - este puede aun variar dependiendo del costo del lugar -, e incluye ademas del entrenamiento, cafeteria y comida.
NOTA: Si alguien necesita factura por el RailsCamp, el costo es diferente, por favor contactenme directamente a mario.chavez en decisionesinteligentes

Patrocinio para estudiantes: Al juntar a 10 personas para el RailsCamp, se le otorgara un patrocinio del 100% a un estudiante, asi que si eres estudiante dejame saber en los comentarios porque quieres aprender Ruby On Rails y al llenar el curso eligire al comentario mas convincente.

A los interesados, por favor les pido si pueden hacermelo saber en los comentarios del post.

Y ya para finalizar este post, también estoy preparando un MovilCamp, ya una vez que tenga los detalles los estaré publicando.

Trabajando con Arel

ActiveRecord en Rails 3.0 sufrió un cambio significativo al cambiar la forma en como se generan las consultas de SQL. Y es que a partir de esta versión, ActiveRecord hace uso de ARel.

ARel es su definición oficial es la “Interpretación Orientada a Objetos de Algebra Relacional”, siendo la Algebra Relacional un modelo matemático para la representación de “queries” sobre datos.

Y si llegaron a este punto y leyeron palabras como “álgebra”, “matemático”; no, no paren de leer.

Algebra Relacional, suena como a algo “muy matemático”, ¿pero en términos de ActiveRecord que beneficios tenemos o en que se traduce?

Bueno hay 2 beneficios muy visibles del uso de ARel.

Primeramente ActiveRecord nos permite encadenar “queries”, lo que se traduce que programaticamente podemos crear consultas mas complejas, pero también nos ayuda a realizar una refactorizacion mas simple para eliminar duplicidad.

» Company.where(:code => ‘TST’).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = ‘TST’) ORDER BY code desc”

» Company.where(:code => ‘TST’).where(:name => ‘Company’).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = ‘TST’) AND (`companies`.`name` = ‘Company’) ORDER BY code desc”

» Company.where(:code => ‘TST’).order(:active).limit(20).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = ‘TST’) ORDER BY code desc, active LIMIT 20”

ActiveRecord hace un buen trabajo creando una abstracción sobre ARel, con una interface simple para hacer consultas.

El segundo punto importante es que al momento de formar una consulta programaticamente ARel nos proporciona un objeto Query, el cual un no se ejecuta y que nos permite agregar mas “queries” a nuestra consulta en base a la información que nos proporciona el usuario.

» query = Company.where(:code => ‘TST’)

» query = query.order(:active)

» query = query.limit(20)

» query.to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = ‘TST’) ORDER BY code desc, active LIMIT 20”

Es decir podemos modificar nuestra consulta programaticamente antes de que sea enviada al servidor de base de datos para su ejecución.

A través del API de ActiveRecord podemos crear consultas de cierta complejidad, pero llega un momento en que la única forma de escribir nuestra consulta es usar código de SQL parcialmente, por ejemplo: No podemos escribir una consulta con OR únicamente usando el API de ActiveRecord.

» Company.where(‘code = ? or name = ?’, ‘TST’, ‘Company’).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (code = ‘TST’ or name = ‘Company’) ORDER BY code desc”

Podemos notar el ‘code = ? or name = ?’, ‘TST’, ‘Company’ que no se ve muy orientado a objetos. En las consultas mostradas previamente en este post hemos usado ARel de manera indirecta, ahora llega el momento de usarlo directamente para que nuestra consulta nuevamente se “sienta” mas orientada a objetos.

Lo primero que tenemos que hacer para utilizar ARel directamente es contar con la referencia de la tabla sobre la que vamos a ejecutar nuestra consulta, esto lo hacemos a través de nuestro modelo:

» company_table = Company.arel_table

Ahora podemos crear una consulta de la siguiente manera:

» company_table[:code].eq(‘TST’).to_sql

=> “`companies`.`code` = ‘TST’”

» Company.where(company_table[:code].eq(‘TST’)).order(‘code desc’).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE (`companies`.`code` = ‘TST’) ORDER BY code desc”

Para lograr nuestra consulta con OR usando ARel en conjunto con ActiveRecord, simplemente tenemos que construir la parte del OR con ARel y dejar el resto a ActiveRecord.

» Company.where(company_table[:code].eq(‘TST’).or(company_table[:name].eq(‘Company’))).to_sql

=> “SELECT `companies`.* FROM `companies` WHERE ((`companies`.`code` = ‘TST’ OR `companies`.`name` = ‘Company’)) ORDER BY code desc”

Como podemos ver ARel es una buen avance sobre ActiveRecord en Rails para la realización de consultas, algo positivo es que aunque ActiveRecord nos presenta su API para consultas, no es posible acceder a ARel directamente.

Actualmente ARel es solo utilizado en ActiveRecord, por lo que tiene una conexión a este, pero en e sitio de ARel mencionan que dentro de los planes a futuro esta el romper esta relación, haciendo posible que ARel pueda utilizarse fuera de Rails y que el motor generador de las consultas trabaje con otros repositorios fuera de RBDMS, como puede ser XML o IMAP.

RailsCamp de Enero

Este post estaba en el “tintero” desde ya hace algunas semanas, pero por muchas cuestiones no lo habia podido terminar de escribir.

Mi intención es darle las gracias a las personas - 10 - que asistieron al RailsCamp a principios de Enero, esperando que hayan pasado un buen momento en los 3 dias que estuvimos trabajando en Rails y sobre todo que se hayan quedado con algún conocimiento nuevo.

Entre los asistentes habíadesarrolladores que ya habian tenido contacto previo con Rails y otros que era su primera vez. Los temas que se vieron sobre Rails estuvieron en el entorno de como hacer BDD/TDD con Rails, y quizas resultaron un poco difíciles para quienes no habían tenido alguna experiencia previa.

Quiero agradecerle tambien a Mario Torres y Aprovi Software por prestarnos un espacio durante ese fin de semana para llevar a cabo el curso.

Como este curso tuvo cupo limite, quedaron algunas personas interesadas en un segundo curso, aunque en esta ocasión este segundo curso seria mas basico e introductorio sobre Ruby On Rails y seria tambien tipo RailsCamp, 3 dias a partir de un viernes por la tarde/noche y sábado y domingo, aun no hay fecha ni lugar pero tambien tendría cupo limite y costo.

Ademas del RailsCamp, tambien estoy preparando un MobileCamp para desarrollar para dispositivos móviles con HTML5, CSS3 y JavaScript.

Si están interesados en alguno de los Camps me ayudaria mucho si pueden comentar en el post para tener una mejor idea del interes de ambos.

Y ya por ultimo, quiero invitarlos a un Webinar sobre Ruby on Rails que voy a dar en conjunto con @JoeDayz, este proximo 8 de Febrero de 4m a 6pm PST, es un Webinar gratuito y se pueden registrar en la pagina de JoeDayz.