Open Social Api 0.7 acaba de ser liberada para Ruby entre otros lenguajes.
Podéis encontrarlas para su descarga en el blog de OpenSocial.
Cuando encuentre un ratillo trastearé algo con ella, a ver que se puede hacer, y si merce la pena agregarla a una aplicación tipo blog en pequeñas dosis para incrementar el compoenente social.
Si alguien juega un poquillo con ellas que deje sus experiencias por aquí.
Desarrollo, Ruby, RubyOnRails
Una buena manera de detectar cuellos de botella en nuestras aplicaciones es revisar los log y ver los tiempos de carga de cada una de las peticiones, consultas a labase de datos o renderizados. Para esto desde hace algún tiempo estoy usando Rawk que ya va por la versión 1.2.
Rawk nos ofrece a simple vista
- Las peticiones más tiempo han tardado en cargar (punto a mejorar clave)
- Las estadísticas de visitas y tiempos medios de carga de cada una de las peticiones.
- Una serie de tops 20 según la media, desviación y otras medidas estadísticas.
El uso manual muy sencillo:
1
2
| chmod u+x rawk.rb
ruby rawk.rb -f <ruta del fichero de log> |
Desarrollo, logs, performance, rawk, RubyOnRails
Ayer decidí actualizar a Passenger 2.0.5 y migrar una aplicación a Rails 2.2.2. Una vez echo todo el proceso, revisado en local etc. me dispongo a subirlo al servidor de desarrollo, el Apache arranca perfecto y sin problemas.
Cuando entro cargo la url del sitio me encuentro el siguiente problema que me lanza el Passenger, eso si, de forma muy bonita:
“No such file or directory - /nonexistent” - Errno::ENOENT
Después de revisar gemas, plugins y volverme un poco tarumba me entere de dos cosas:
- Que el Mod_Rails se pasa por el forro el RAILS_EN del enviroment.rb
- Que toma por defecto el entorno de producción
Solución…. Muy fácil en la definición del Virtual Host agregamos la directiva RailsEnv development.
Otro aspecto a tener en cuenta con este error es una linea que viene en el production.rb
1
| config.action_view.perform_caching = true |
que al parecer en la versión 2.2.2 de Rails ya no se usa y casca la falla el Passenger a la hora de cargar la página. con que debemos de borrar esta linea del fichero.
Otro problema común que haga saltar este error es la posible falta de algún tipo de directorio como el tmp o el log, ya que me paso con la 2.0.1 del Passenger.
Si alguien tiene más experiencias con este error que las comente para hacer una recopilación.
mod_rails, RubyOnRails
Practicando un poco con el PS hice este fondo para una resolución de 1680×1050 que es la de mi iMac.

A mi me mola como queda puesto
Saludos!!!
RubyOnRails, wallpapers
Buscando unos temas sobre las migraciones di con esta cheatsheet que será bastante útil para más de uno.
Enlace a Ruby on Rails Migrations Cheatsheet
En el post del autor podéis encontrar un PDF descargable en tamaño A4.
RubyOnRails
Hace poco que arrancó la versión de Rails 2.2 con una par de subversiones encima. Casi a la par salio Gems 1.3.0 que ya subió a la 1.3.1.
La actualización a ambas es bastante recomendable sobre todo por las nuevas características que trae Rails 2.2 (Thread safe, Internacionalización gracias a I18n, …)
Primero actualizamos gem:
Desde la 1.1.0
sudo gem update –system
Desde la 1.2.0 o superior
sudo update_rubygems
Las gemas están listas ahora solo queda actualizar todo el repertorio de gemas que tengamos en el sistema, entre las que esta Rails.
sudo gem update
Estoy jugando un poco con la clase I18n, dentro de poco publicaré algo sobre la internacionalización de las aplicaciones.
Saludos!!!
RubyOnRails
Desde Rails Inside he llegado a Spree, una solución para el comercio electronico basada en Ruby on Rails (2.0.2) y que se distribuye bajo licencea New BSD.
La versión de descarga de Spree est ista para una puesta en producción. Del mismo modo se pueden modificar a gusto del consumidor para adaptarla a sus necesidades. Una de las cosas que me gusta es que se distribulle en forma de gema y el código se gestiona con git.

Spree
RubyOnRails
Desde el blog de Phusion estoy leyendo y probando una interesante entrada para mejorar el suso de daemons que podemos necesitar en alguna de las aplicaciones que desarrollamos día a día.
En un primera lectura rápida proponen el lanzamiento de los demonios (como el del ferret por ejemplo) bajo demanda de modo que se limite un poco el uso de memoria.
Os dejo el enlace del post: daemon_controller a library for robust daemon managment
Si me meto más con el tema, ya veremos que tal.
libraries, Ruby, RubyOnRails
En la última semana tuve que trabajar con maquinas de estado y probe el plugin de acts_as_state_machine y la verdad es una maravilla. Este plugin nos permite definir una serie de estados para un objeto junto con las transicciones de los estados. Cada estado lleva asociados tres tipos de callbacks en tres momentos temporales:
1
2
3
| :enter => Proc.new { |bar| foo } #antes de entrar al estado.
:after => Proc.new { |bar| foo } #después de entrar al estado.
:exit => Proc.new { |bar| foo } #al salir del estado. |
El uso del plugin es bastante sencillo. Empezamo con la instalación:
1
2
| $ script/plugin install /
http://elitists.textdriven.com/svn/plugins/acts_as_state_machine |
Una vez instalado solo tenemos que definir el modelo de la siguiente manera (para no liarlo mucho solo pondré los elementos realcionados con el plugin):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class Ticket << ActiveRecord::Base
acts_as_state_machine :initial => :opened
state :opened, :enter => Proc.new { #Validates something }
state :asigned, :after => Proc.new { #Add to TODO }
state :closed, :exit => Proc.new { #Audit ticket }
event :asig do
transitions :from => :opened, :to => :asigned
end
event :close do
transitions :from => :opend, :to => :closed
transitions :from => :asigned, :to => :closed
end
end |
Con esto nos creariamos una clase Ticket con tres estados, opened, asigned y closed. Los eventos son los encargados de desencadenan las transiciones entre los estados.
Una vez en el controlador podríamos hacer:
y el estado de la incidencía pasa a cerrado.
En la base de datos el campo por defecto que Act_as_state_machine usa es el state que podeís modificarlos usando :column como opción. Ahora queda trastear. espero que os ayude en algo.
Saludos.
Referencias:
acts_as_state_machine en Agil Web Development
Plugins, RubyOnRails