Publicidad:
La Coctelera

RoR-Lab

Evolución, anécdotas, problemas y soluciones durante el desarrollo de una aplicación web con Ruby on Rails

31 Julio 2007

Variables de clase en el modo "development". (que no le pase a ud.)

Saludos.

Estaba desarrollando una funcionalidad donde necesitaba almacenar información en una variable. Esta información debería ser la misma para todas la instancias de una misma clase. Solución: una variable de clase. Las variables de clase en Ruby (como supongo que saben todos los que leen este blog) se definen con doble arroba (ej. @@myvariable)

Pasa que cuando hacía un 1er request al servidor ponía datos en esta variable y subsequentes request deberían utilizar la información guardada en dicha variable. Algo sencillo que se me convirtió en un infierno; principalmente, por descuido (digo yo, mi hermana lo llama de otra manera).

Digo infierno porque resulta que en el primer request se guardaba información allí, pero en los siguientes requests la información ya no estaba. Le dí vueltas a esto creo yo unas 3 horas. Tres horas de mis precioso y valioso tiempo!, de mi vida!. Bueno no es tanta la tragedia tampoco, además si mi error le puede servir a alguien para algo, valió la pena.

¿Que pasaba?. Como siempre busqué un poco y encontré por fin la solución en uno los hechos básicos del desarrollo en Rails: cuando tienes el servidor en modo "development" cada petición cargará todo nuevamente. Es decir, no se mantendrá el estado de lo que se había puesto anteriormente; entre esas cosas están, como no, las variables de clase!.

Saludos y sí... aunque no lo crean son apenas como 20 almas las que de vez en cuando se pasan por acá.

Aprovecho para proponer una especie de revista sobre Rails (en español) donde los blogers mas conocidos, puedan publicar periódicamente. Eso, creo yo, aportaría mucho a la comunidad.

Tags: tips

servido por Luis Felipe 2 comentarios compártelo

2 comentarios · Escribe aquí tu comentario

Aníbal Rojas

Aníbal Rojas dijo

En realidad tu problema es un poco más complejo, aún cuando estés ejecutiando en ambiente de producción: Muere una instancia y se levanta una nueva que la reemplaza o dos REQUESTs sucesivos del mismo cliente son atendidos por dos instancias de la aplicación. Creo que lo que quiers resolver, al final va a terminar en la BD.

1 Agosto 2007 | 04:31 PM

Luis Felipe Hurtado Campuzano

Luis Felipe Hurtado Campuzano dijo

Hola Aníbal. Si, a la final terminó en la base de datos pero de una manera indirecta. El problema principal era que la información no podía quedar en la base de datos, ni tampoco en disco, por que era una llave de seguridad que proveía el usuario y que era utilizada para desencriptar los datos de su tarjeta de crédito. A la final (ni tan al final porque todavía no es la última palabra), la puse en la session y bueno la session está siendo guardada en la base de datos. Por eso digo que sí quedó en la base de datos.

1 Agosto 2007 | 04:40 PM

Los comentarios están cerrados


Sobre mí

Actualmente me encuentro desarrollando una aplicación web que espero tener en producción para la mitad del 2007. La aplicación está desarrollada utilizando el framework Ruby on Rails. (RoR) Toda la evolución del sistema va a ser documentada en este blog con el ánimo de recibir retroalimentación o bien ser útil para otros desarrollos.

Fotos

Luis Felipe Hurtado Campuzano todavía no ha subido ninguna foto.

¡Anímale a hacerlo!

Buscar

suscríbete

Selecciona el agregador que utilices para suscribirte a este blog (también puedes obtener la URL de los feeds):

¿Qué es esto?

Crea tu blog gratis en La Coctelera