22
Jul

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

free blog themes
22
Jul

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?


free blog themes
16
Jul

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.


free blog themes
15
Jul

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.


free blog themes
27
Jun

MetaInspector en GitHub

Mi gema MetaInspector ahora se encuentra alojada en GitHub en lugar de RubyForge.

MetaInspector es una gema ruby a la que le das una URL, la visita y te devuelve un hash con su título, description, keywords y enlaces. Muy sencillita y básica, y con códigos por pulir y mejorar… se trataba sólo de probar a hacer una gema.

Ahora he descubierto GitHub y me encanta el concepto de “Social Code Hosting”. Espero recibir colaboraciones al código pronto!

Más info en code.jaimeiniesta.com/metainspector


free blog themes
09
Jun

Controlar los mongrels con monit en Slicehost

Recientemente me he estado pegando con mi mongrel cluster en un una de mis aplicaciones en Slicehost… Los mongrel comenzaban ocupando menos de 50 Mb de memoria pero conforme pasaban los días iban ganando peso y llegaban a chupar cerca de 200 Mb, acabando con la memoria disponible…

Parece que esta facilitar para ganar peso de los mongrels es en parte natural (van creciendo conforme van cargando códigos de la aplicación) y en parte debido a bugs en el propio código de mongrel, plugins de rails, etc. Sea como sea, es necesario mantenerlos a raya.

Para ello, qué mejor que monit. Esta aplicación se emplea para controlar los procesos de un servidor, de manera que podemos medir continuamente el tamaño de ram que emplean (y otras medidas como uso de cpu, carga…) y reiniciarlos en caso necesario. También puede encargarse de comprobar que los procesos están corriendo y lanzarlos en caso de que se hubieran caído. Lo podemos usar para todos los procesos del servidor, no sólo los mongrels: nginx, apache, mysqld, sendmail, etc.

Os cuento cómo lo monté en mi servidor debian en slicehost:

1.- En primer lugar, instalamos monit:

sudo apt-get install monit

2.- Una vez instalado, tenemos un fichero de configuración de monit. Está bien guardarlo como ejemplo pues vienen muchos casos útiles, pero para simplemente controlar mongrels, podéis hacer como en este ejemplo:

set daemon 60
set mailserver localhost
set mail-format { from: monit@tuaplicacion.com }
set alert tu@email.com

set logfile /var/log/monit.log

##### mongrel 12000 #####
check process mongrel-12000 with pidfile /home/usuario/apps/aplicacion/tmp/pids/mongrel.12000.pid
    start program = "/usr/bin/mongrel_rails cluster::start -C /home/usuario/apps/aplicacion/config/mongrel_cluster.yml --clean --only 12000"
    stop program  = "/usr/bin/mongrel_rails cluster::stop -C /home/usuario/apps/aplicacion/config/mongrel_cluster.yml --clean --only 12000"

    if totalmem is greater than 75.0 MB for 5 cycles then restart       # eating up memory?
    if cpu is greater than 50% for 2 cycles then alert                  # send an email to admin
    if cpu is greater than 80% for 3 cycles then restart                # hung process?
    if loadavg(5min) greater than 10 for 8 cycles then restart          # bad, bad, bad
    if 3 restarts within 5 cycles then timeout                          # something is wrong, call the sys-admin

    if failed port 12000 protocol http                   # check for response
        with timeout 10 seconds
        then restart
    group mongrel

El código es muy fácil de entender:

  • La primera línea establece cada cuántos segundos se despertará monit para hacer sus comprobaciones
  • El siguiente bloque establece la configuración para los envíos de email de alerta
  • La línea de logfile indica en qué ficheros guardar los logs
  • Y después, un bloque para cada proceso que se quiera vigilar. Para cada proceso hay que indicar el nombre que le daremos a este, dónde puede encontrar el PID del proceso, y cuál es el comando para arrancarlo y para pararlo. A continuación, se pueden poner varias directivas para las comprobaciones. En este ejemplo, si el mongrel consume más de 75 Mb de RAM durante 5 comprobaciones (cycles) seguidas, se reiniciará el proceso (vamos, se le hará un stop y un start con los comandos arriba indicados). Hay otras comprobaciones adicionales debajo. También se comprueba que el mongrel esté accesible en su puerto, y si no se reinicia, etc.

En mi caso tengo 3 mongrels… para controlar los otros dos se copia ese ultimo parrafo exactamente igual para cada uno, pero cada uno en su puerto, claro… 12001 y 12002 en mi caso.

3.- Ya casi estamos… para indicar que monit se arranque al iniciar el servidor, editaremos el fichero /etc/default/monit y lo indicaremos mediante la línea startup=1

4.- Y finalmente, para lanzar monit ahora sin tener que reiniciar el servidor…

sudo /etc/init.d/monit start

5.- Como nota final, un tema que me encontré es que cuando monit entraba en acción y reiniciaba algún mongrel, me los lanzaba como usuario root en lugar de como el usuario no-root con el que normalmente lanzo el mongrel cluster. Esto era porque me faltaba indicar en el fichero config/mongrel_cluster.yml de mi aplicación el usuario y grupo con el que se deben ejecutar los mongrels:

---
user: usuario
group: grupo
(...)

Eso es todo amigos… espero que os venga bien y os facilite la vida al tener que estar menos pendientes del servidor…

Gracias a Marze y The Robot por sugerirme usar monit, y a Guillermo por darme la pista sobre el tema del usuario no-root en la lista hacking-es.


free blog themes
05
Jun

Aplicación Rails que se autodestruye

Suicidio de amor / Love suicideTras leer el interesante artículo 21 Ruby Tricks You Should Be Using In Your Own Code sobre la posibilidad de borrar un árbol de directorios con FileUtils.rm_r ‘nombre_directorio’ no pude resistir la tentación de probar esto:

rails autodestroy
cd autodestroy
script/generate controller Suicide now

Y en app/controllers/suicide_controller.rb:

def now
FileUtils.rm_r "#{RAILS_ROOT}"
end

Listos para la autodestrucción…

script/server
Al visitar http://localhost:3000/suicide/now, la aplicación se borrará a si misma del disco duro.

Manejar con cuidado! :P

Creative Commons License photo credit: Vagamundos


free blog themes
14
May

Euruko 2009, en Barcelona

My entry to the ruby logo contest
Ya es oficial!

La candidatura que hemos presentado desde el Spanish Ruby Users Group para organizar la Euruko 2009 en Barcelona ha sido aceptada.

Comienza un largo trabajo de organización para traernos la mejor conferencia de Ruby a casa… Seguiremos informando!

Creative Commons License photo credit: dandiemer


free blog themes
15
Apr

Charla sobre programación Java en la UdG

El grupo Freelance Girona seguimos en activo organizando charlas… Este miércoles contaremos con una charla sobre Java y ejemplos prácticos de una aplicación que corra sobre distintos entornos (PC, PDA y Web).

Más datos aquí:

Pròxima Xerrada del Grup 16 d’abril a les 20:00 Sala d’actes del P4


free blog themes
30
Mar

Euruko 2009 en Madrid?

Euruko 2009Euruko 2008 acaba de finalizar. Ahora toca decidir en qué ciudad se celebrará Euruko 2009. La cosa está entre Madrid y Cracovia.

Ayuda a decidir apuntandote al grupo de Euruko en Facebook.


free blog themes