Analiza los cuellos de botella de MySQL con Query-Reviewer

A raíz del artículo “4 simple steps to detect & fix slow rails requests” he descubierto un plugin muy interesante para detectar cuellos de botella en las consultas a MySQL desde nuestras aplicaciones Rails.

Se trata de query-reviewer, que se encarga de mostrarnos avisos directamente con una capa flotante en el navegador, cuando estamos en modo de desarrollo. El plugin analiza las consultas realizadas y nos indica si todo va bien, o muestra los avisos de que hay cosas que se podrían mejorar, por qué y cómo.

Tras un rato examinando los avisos generados y siguiendo sus consejos para añadir índices a las tablas y contadores a algunas asociaciones en los modelos, he incrementado por 3 la velocidad de respuesta de algunas de las partes de mis aplicaciones.

Conferencia Rails 2008… here we go again!

Aunque este año hemos tardado un poco en arrancar, el equipo de organización de la Conferencia Rails estamos de nuevo a la carga organizando el evento.

Ya nos puedes enviar tus propuestas de charlas, tanto si son ponencias técnicas como casos de éxito (qué mejor ocasión para promocionar tu nueva app)…

Toda la información actualizada en el blog oficial, www.conferenciarails.org y en nuestro canal de twitter, twitter.com/conferenciaror

Compatibilizar ar_mailer con exception_notifier

Exception Notifier es un plugin muy recomendable para recibir notificaciones por email de los errores de tus aplicaciones rails en producción, con todo detalle de lo que ocurrió. Lo considero imprescindible en todas mis aplicaciones. Amaia tiene un excelente tutorial sobre Exception Notifier.

Por otro lado, si tu aplicación maneja mucho envío de emails, es recomendable usar algún sistema de colas para el envío de correos. Ar_mailer es una gema genial para esto, que permite delegar el envío de correos a un demonio de manera que los mails se apuntan en una tabla y el demonio los va leyendo de ésta para enviarlos en background.

Peeeeerooo… resulta que tras instalar ar_mailer, dejé de recibir las notificaciones de exception_notifier. Out-of-the-box ambos sistemas son incompatibles, con lo que en caso de ocurrir una excepción en la aplicación, cuando exception_notifier intenta enviar un email, no se entiende bien con ar_mailer y no se llega a producir el envío, dando un error 500.

Afortunadamente, googleando un poco encontré la solución. Basta con añadir esta línea al fichero config/initializers/exception_notifier.rb para que no no se use ARMailer para el envío de notificaciones sino que lo haga directamente (en lugar de a través de activerecord como se hace con ARMailer). En mi caso uso SMTP, pero también podría valer :sendmail.

ExceptionNotifier.delivery_method = :smtp

PageRankAlert, reescrito y en nuevo servidor

La semana pasada completé la reescritura de PageRankAlert.com y tras unos días funcionando en el nuevo servidor (slicehost, antes estaba en dreamhost), y unas pocas pruebas, la doy por inaugurada :)

Se trata de una limpieza de códigos y reescritura para sentar la base a las nuevas funcionalidades que tengo en mente y comenzaréis a ver en los próximos días.

Por el momento poca cosa nueva aparte de que ahora el PageRank se calcula en tiempo real (te devuelve el valor en el instante), y que además el bot notifica a través de Twitter, y un par de veces por día va contando las novedades:

http://twitter.com/pagerankalert

Y tú, ¿ya tienes tu lista de monitorización de PageRank para tus webs?

Envío de correos a través de Gmail con Rails

Gmail, al igual que Google Apps for Domains, se puede usar como servidor de correo saliente (SMTP) para nuestras aplicaciones Rails. Lo único es que como requiere autenticación TLS, no vale con usar simplemente “smtp.gmail.com” como servidor de correo saliente.

El plugin action_mailer_tls resuelve el problema rápidamente:

script/plugin install http://code.openrain.com/rails/action_mailer_tls/

Una vez instalado, en la carpeta /vendor/plugins/action_mailer_tls/sample encontrarás dos ficheros. Copia smtp_gmail.rb dentro de tu carpeta /config/initializers, y copia mailer.yml.sample a tu carpeta /config, renombrándolo a mailer.yml. Finalmente, edita este fichero para usar el user_name y password de la cuenta de correo de Gmail que quieras usar… reinicia el servidor y… ya puedes enviar correos a través de Gmail desde tu aplicación!

Más información en el blog de Daniel Fischer y en el README del plugin.

Reescribiendo PageRankAlert.com

Ya hace dos años y medio que comencé con PageRankAlert.com, una aplicación web que rastrea la evolución en el valor de PageRank para las webs que envían los usuarios.

Dos años y medio! En ese tiempo han pasado muchas cosas en el mundillo Rails y he aprendido muchas cosas nuevas sobre programación con Ruby on Rails…

Es hora de lanzar una nueva versión. Aunque todo sigue funcionando como el primer día (la aplicación tiene almacenados 37.000+ cambios de PageRank para 8.000+ URLs), he decidido reescribir los códigos por completo, aprovechando la tranquilidad del verano.

Nuevos códigos, nueva funcionalidad y nuevo diseño. Próximamente en tu navegador favorito.

Si tienes alguna idea, sugerencia, consejillo, algo que te gustaría ver incluido en la siguiente versión… te agradeceré que me dejes un comentario.

In The Ghetto

Ya hemos llegado al viernes! Para terminar esta semana dedicada a canciones relacionadas con Ruby, nos despedimos con este temazo dedicado a Zed Shaw

In the ghetto, de Elvis Presley
As the snow flies
On a cold and gray chicago mornin
A poor little baby child is born
In the ghetto
And his mama cries
cause if theres one thing that she dont need
Its another hungry mouth to feed
In the ghetto

People, dont you understand
The child needs a helping hand
Or hell grow to be an angry young man some day
Take a look at you and me,
Are we too blind to see,
Do we simply turn our heads
And look the other way

Well the world turns
And a hungry little boy with a runny nose
Plays in the street as the cold wind blows
In the ghetto

And his hunger burns
So he starts to roam the streets at night
And he learns how to steal
And he learns how to fight
In the ghetto

Then one night in desperation
A young man breaks away
He buys a gun, steals a car,
Tries to run, but he dont get far
And his mama cries

As a crowd gathers round an angry young man
Face down on the street with a gun in his hand
In the ghetto

As her young man dies,
On a cold and gray chicago mornin,
Another little baby child is born
In the ghetto

Y con esto nos despedimos de este especial… Es una pena no haber encontrado el vídeo de la canción que me dió la idea de hacer este especial, “Ruby Dear“, de Talking Heads, pero no se puede tener todo en la vida!

Quedan muchas canciones relacionadas con Ruby, os reto a buscar canciones para Rails… y ya puestos, para Merb! Eso si que tendrá mérito…