Category Archives for RubyonRails

Detectando problemas de rendimiento en rails

Hace tiempo ya escribí un post que había podido analizar cuellos de botella en la base de datos por falta de índices con el plugin query analyzer. Ahora voy a hablar de otro problema que es complejo de analizar que consiste en detectar aquellas páginas que son más lentas y hacer pruebas de rendimiento en nuestra web.

El primero que he encontrado es RAWK:

Consiste en un fichero ruby que nos descargamos a nuestro servidor y lo ejecutamos directamente indicándole cual nuestro fichero production.log. Este lo que hará será analizarlo y sacar estadísticas muy completas. Es perfecto para poder analizar aquellas consultas más lentas o las que más se están realizando.

Para ejecutarlo hacer ruby rawk.rb < log/production.log

Si queréis guardar el resultado en un fichero ruby rawk.rb < log/production.log > file.txt

También si queremos borrar los logs lo podemos hacer con rake  log:clear RAILS_ENV=’production’

Con este he encontrado varías páginas que son excesivamente lentas y además puedes ponderar por el número de veces que han sido usadas permitiéndote hacer una estrategia de optimización.

El siguiente es Rails Analyzer:

Consiste en una serie de herramientas para realizar pruebas de carga y analizar rendimientos. Dispone de varías herramientas como Bench, Crawler, RailStat, IOTail, Action Profiler y Syslogger. He probado Crawl que empieza a hacer una serie de llamadas a una dirección web analizando cuando lo paramos el rendimiento real de este. Muy interesante. Con Bench hacemos lo mismo, pero lo hace en paralelo y nos puede ayudar a dimensionar el número de fastcgi o mongrels que ponemos.

Aún me falta profundizar en todos ellos, pero gracias a estas herramientas se me abren nuevas posibilidades de optimización que hasta ahora se me hacían más difíciles. ¿ conoces otras formas de analizar y optimizar?

 

Vía | Analyzing the Production log (podcast)

L-exp | Rails plugins and gems ( mis preferidos)

Phusion Passenger - un modrails para apache

Existe un proyecto que pronto se convertirá en realidad que consiste en un módulo del servidor HTTP Apache para ejecutar y configurar fácilmente Ruby on Rails . No soy experto en el tema, pero la idea es que se puedan crear instalaciones fáciles y de forma efectiva. Anuncian desde su blog que pronto estará disponible una versión para ser probada públicamente.

Entiendo que en cuanto a rendimiento y estabilidad también deberá tener sus ventajas ya que como se puede ver los primeros resultados son buenos.

También se puede ver un vídeo que muestra  con más detalle su funcionamiento.

 

Best Ruby on Rails Blogs

Ruby on Rails server components

Que novedades traerá Rails 2.1

Desde Riding Rails (Blog oficial de Ruby on Rails) nos informan de un avance de las novedades que traerá Rails 2.1. Estas son:

  • Dependencias de Gems
  • Dirty tracking con actualización parcial
  • has_finder de la forma de named_scope
  • Soporte incluido de timezones ( me írá muy bien)
  • Mejor infraestructura para el caching

Podéis ver más detalles en la fuente.

No comenta nada sobre el rendimiento, quizás será el tema del caching el arma que tenía escondida.

The Rails Way

He estado utilizando últimamente este libro con bastante frecuencia y he podido resolver varios temas que tenía pendientes en L-exp de forma fácil.

Este libro escrito por Obie Fernández se ha convertido para mi en una buena fuente de consulta y para resolver determinados temas. Esta escrito con mucho detalle y además tratando todos los temas clave para que se puedan resolver fácilmente con la lectura ( ata todos los cabos ).

Trata todos los temas que tenemos que conocer para desarrollar aplicaciones con Ruby on Rails. Además no sólo se limita a tratar lo académico sino que además aporta otros elementos para hacer que las aplicaciones sean más funcionales y que el desarrollo sea más ágil. Además aporta experiencias suyas y consejos.

Este libro está actualizado ya que soporta Rails 2.0 y por tanto de momento estaremos a la última. Cosa que en algunos libros de Rails al cambiar de versión han quedado desfasados.

Pude ver a Obie Fernández en La Conferencia Rails hispana 2007 y me causó muy buena impresión. Una persona bastante pragmática y con mucho expertice. Claramente refleja la impresión que me llevé con este libro.

He ido recomendando libros alguna vez y supongo que hay un libro para cada cosa. Para mi este sería el tercer libro que me compraría si empezase con Ruby on Rails ahora.

  1. Agile Web Developing with Rails (2n edition)
  2. Ruby for Rails
  3. The Rails Way

Este libro está en inglés y no se si existe traducción. La ventaja es que ahora el dólar está barato.

Podéis ver una lista en L-exp sobre mis recomendaciones de libros con todos los enlaces. Plantearos hacer una pequeña inversión y ganaréis bastante tiempo en aprender Rails. 

Creando ficheros OPML con Rails

Es un código muy sencillo para generar un fichero OPML ( Outline Processor Markup Language) que permitirá exportar las feeds que tiene una determinada lista en L-exp y luego poderla importar en nuestro lector de feeds preferido.

 

El código es el siguiente:

En nuestro controlador

def create_opml
@data= Data.find_by_id(params[:id])
end

 

En nuestra vista

xml.instruct! :xml, :version=>"1.0" , :encoding=>"UTF-8"

xml.opml "version"=>"1.0" do

xml.head do

xml.title(@data.name)

xml.dateCreated(@data.created_at.strftime("%a, %d %b %Y %H:%M:%S %Z"))

xml.dateModified(@data.updated_at.strftime("%a, %d %b %Y %H:%M:%S %Z"))

xml.ownerName(@data.user.login)

end

xml.body do

for element in @data.elements

if not element.program.feed.blank? and not element.program.feed=='http://'

xml.outline "text" => element.program.name, "title" => element.program.name , "type" => "rss", "xmlUrl" => element.program.feed, "htmlUrl"=>element.program.web

end

end

end

end

Podéis utilizar un validador para comprobar que realmente cumple con las especificaciones OPML.

Acordaros de añadir un ruta en routes.rb

map.connect ‘/xml/opml/:id/export.opml’, :controller=>’xml’, :action=>’create_opml’

sobre esta configuración básica podéis hacer las variaciones que queráis. En mi caso necesito un id que referencia la lista con los datos. Pero esto es adaptable  a vuestras necesidades.

Rendimiento de Rails 2.0 y el futuro Rails 2.1

Desde Riding Rails nos informan que alguien ha hecho una comparativa demostrando que Rails 2.0 es entre un 30 y 50% más rápido que Rails 1.2.X. Además otro estudio muestra que consume menos memoria que la versión previa.

En el post nos anuncian que para la versión 2.1 vendrán interesantes novedades que aún harán ganar más rendimiento. ¿quizás la integración con Ruby 1.9?

Microsoft pide ayuda para integrar Silverlight con los lenguajes dinámicos

Me ha llamado la atención la  presentación que han hecho en MIX08 llamada Microsoft Silverlight and Dynamic Languages. En esta  Microsoft hace un claro image manifiesto  que Silverlight ( Flash killer) va a estar abierto a todo. Por tanto quieren que todas estas comunidades ( Rails, Django, PHP, Merb, ….) colaboren para que Silverlight se pueda usar desde estas de forma totalmente gratuita y sin limitaciones.

Insisten en que se pueda desarrollar en cualquier plataforma ( Windows, Linux, Mac), con cualquier navegador ( IE, Firefox y Safari) y cualquier editor (Visual Studio, Textmate, Vim, etc…)

Si veis el vídeo podréis comprobar que hacen una demo “Hello World” usando Ruby y con un Mac que utiliza mono (.NET para Linux). Posteriormente hacen una con un equipo con Windows Vista que es más completa ya que conecta con Flickr y utiliza Norvig spell checker  para detectar posibles palabras parecidas. Una con ASP.NET MVC Framework y otra con ruby sobre Windows.

Ya es posible integrar Rails con Flex y de forma muy completa. A ver si la comunidad se anima y trabaja para que podamos integrarlo fácilmente.

Videos RailsConf 2007

Acabo de encontrar los vídeos de las presentaciones que hubieron en RailsConf 2007. No tenemos nada que envidiar en la Conferencia Rails hispana 2007.

No conocía blip.tv y tiene una opción para descargarlo en iTunes.

Escribiendo en el logger de una aplicación Rails

El logger permite escribir lo que queramos en el fichero production.log o development.log. Donde Rails escribe toda la información de lo que va ocurriendo. Hasta ahora yo nunca lo había hecho y por tanto desconocía como hacerlo. Como siempre en Rails es trivial……

Simplemente:

RAILS_DEFAULT_LOGGER.info “hello”

Con esta instrucción lo podemos hacer desde cualquier parte de la aplicación ( incluso desde una tarea Rake).

Podemos usar .info, .warn, .debug,.error,.fatal como tipos de eventos.

L-exp ya corre sobre Rails 2.0

Efectivamente ha terminado el período de adaptación y migración de L-exp a Rails 2.0.2. Puedo constatar que ha sido muy sencillo y fácil. Curiosamente donde he tenido que migrar más  es lo primero que empecé a desarrollar que copiaba de ejemplos que iba encontrando por internet con código más antiguo.

Rails 2.0 ha eliminado (deprecated) algunos métodos y funciones que ya estaban obsoletas. Imagino que ha sido para hacer limpieza y poder aligerar el código de la framework.

 

Las principales cosas que me he encontrado han sido:

  • Paginator. Deja de estar en Rails, pero existe un plugin. Aunque yo he preferido pasar a will_paginate.
  • find_all: Método que ha pasado a obsoleto.
  • Algunos comandos de configuración del environment.rb
  • Otros…

Rails 2.0 trae muchas novedades, y a su vez mantiene muy buena compatibilidad. El proceso ha sido sencillo y rápido. A priori yo diría que he ganado en rendimiento de la aplicación, aunque no tengo ningún benchmark para ratificarlo. Ahora podré utilizar algunas de las mejoras para sacar jugo a las nuevas funcionalidades de la nueva versión.