Rails 3.1: CoffeScript & Asset Pipiline screencasts
7/09/2011Rails 3.1 – CoffeScript from BostonRB on Vimeo.
Rails 3.1 – The Asset Pipeline from BostonRB on Vimeo.
All things must pass…
Rails 3.1 – CoffeScript from BostonRB on Vimeo.
Rails 3.1 – The Asset Pipeline from BostonRB on Vimeo.
Recientemente encontré un ‘bug’ en una aplicación que estoy desarrollando, tiene que ver con los callbacks de Rails, en específico before_save.
Por fín lo he resuelto, no de la manera que esperaba, tal vez por berrinchudo ya que aún me queda una duda, pero al fin puedo continuar desarrollando y un peso se ha ido de mí.
La parte afectada de la aplicación involucra 2 modelos, digamos:
class Category has_many :products end class Products belongs_to :category end app/models/category.rb before_save return unless self.published self.products.first.amount = (algun calculo dinámico) end |
Justo en este callback es donde está lo misterioso, la cantidad(amount) del primer producto nunca cambiaba amenos que actualizara la categoría, la publicara y la grabara 2 veces!! a la 2a vez el cálculo se realizaba, esto me quitó el sueño y me hizo perder gran cantidad de tiempo analizando el problema.
por qué a la 2a vez si pasaba?
Corrí la aplicación con el debugger y pues Rails sí pasaba por esa parte del código pero la cantidad del producto quedaba intacta, incluso intente cosas como estas:
app/models/category.rb before_save return unless self.published self.products.first.amount = (algun calculo dinámico) self.name = 'Algún nombre' end |
Y pues la primera vez que grababa, ya con el atributo de published en true, name sí se actualizaba pero amount no! sólo hasta la segunda… hasta la fecha no entiendo por que sucede esto, no he logrado llegar a una conclusión, lo que sí es que por lo pronto ya encontré una solución:
app/models/category.rb before_save return unless self.published self.products.first.update_attribute(:amount, (algun calculo dinámico)) end |
De esta manera el cálculo ocurre todas y cada una de las veces que la categoría es actualizada.
La rama 1.9 de Ruby alcanzó calidad estable y lista para producción con la versión 1.9.1 que fue publicada el dia de ayer por Yuki Sonoda.
Esta nueva versión ofrece mejoras en la rápidez de ejecución, nuevas clases de objetos, cambios en la sintáxis, un enorme soporte para coficación de archivos, multilenguaje, etc., por lo que se recomienda una pronta adopción, para familiarizarse con los cambios, encontrar bugs, portar gemas y código en general.
Se debe tener en cuenta que muchas gemas no funcionan aún sobre 1.9 así que la actualización debe llevarse con cautela.
Si se desea instalar en Mac OSX sin alterar la instalación de la 1.8.x sólo hace falta seguir las siguientes instrucciones
curl ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2 -o ruby-1.9.1-p0.tar.bz2
tar xjf ruby-1.9.1-p0.tar.bz2
Ahora para no afectar la version instalada se le especifíca un sufijo a la hora de compilarla.
cd ruby-1.9.1-p0/
autoconf
./configure --program-suffix=19
make && sudo make install
Y con eso quedará lista para su uso.
xrx:~ danielroux$ ruby1.9 -e "puts 'hola mundo :-)'" -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-darwin9.6.0]
hola mundo :-)
Ruby 1.9 es sólo una versión de transición hacia la 2.0 que se dice será lanzada en un lapso menor a los anteriores, (Ruby 1.8 fue lanzada en el 2003), en mi opinión a finales del 2011 luego de la 1.9.3; su desarrollo inició ya hace tiempo pero al mantener mucha similutud con la 1.9 el cambio será menos drástico que si lo hacemos desde la 1.8.
Igualmente la versión 1.8 tendrá una actualización, la 1.8.8 , en este mismo año.
Links:
Luego de un buen tiempo separado del blogging este inicio de año vuelvo ya que tengo un par de própositos que cumplir.
El primero tiene que ver con lo que he hecho desde mitad del 2007. En esas fechas un proyecto en el que estaba involucrado se vino abajo y para aprovechar el tiempo que tenía libre luego de eso me puse a leer sobre Ruby, ya que aparecía en todas partes, gracias a la fama que le trajo Rails y quería averiguar de que se trataba todo el alboroto.
Mi meta en ese entonces era aprender Rails, por su enfoque al desarrollo web. Al poco tiempo y luego de leer en repetidas ocasiones el mismo consejo, que aprendiera Ruby primero, decidí tomarlo, cambié mis libros de Rails por los de Ruby y vaya que grata sorpresa fue.
Primero, mucho de lo que había leído en los libros de Rails comenzaba a tener algo de sentido y segundo me enamoré totalmente del lenguaje, a tal grado que me enfoqué totalmente a aprenderlo, con el deseo de convertirme en un gran Rubysta y algún día ser un maestro en él.
Esta misión no ha resultado más que ser un placer, no hay día que no me guste utilizar Ruby, no me canso de ver código en mi pantalla, no me fastidia, no me aburre, no me defrauda.
En Marzo del 2008 conseguí mi primer empleo relacionado con Ruby y Rails, he tenido la oportunidad de trabajar en varios proyectos, de ampliar mi conocimiento sobre Rails, su uso en el mundo real y cada día reafirmo mi gusto por el lenguaje y el framework.
Todo lo anterior es lo que me ha traído hasta aquí, este blog es el siguiente paso en mi objetivo de convertirme en un mejor programador en Ruby.
Cuando hacia mi lista de propósitos para el 2009, me fijé que tenía que involucrarme más en la comunidad de Ruby, tanto en México como en el mundo, lo que hace que este esfuerzo cumpla 2 de mis metas. En el momento no me quedaba claro de qué forma lo haría pero esta semana obtuve mi respuesta.
Comenzaré escribiendo un tutorial de Ruby, lo publicaré aquí y donde me sea posible. Podré aportarlo a la comunidad, ampliaré y reforzaré conocimientos y me actualizaré ya que la nueva versión de Ruby, la 1.9, esta en plena adopción y hay cambios en la sintáxis y cientos si no miles de cambios en la api.
Así que el momento ha llegado de llevar mis conocimientos de Ruby al siguiente nivel, aportar a la comunidad, ayudarla a crecer, conocer gente que comparta mi misma pasión, utilizando nuevos medios de comunicación que hasta la fecha no he explotado para mi crecimiento.
Como aclaración, aunque en este post sólo hablo de Ruby, hasta inténsamente, no tengo nada en contra de ningún otro lenguaje, al contrario, espero en un futuro aprender más, como Python, que es el primero en mi lista y los que atraigan mi atención.