2015-01-26

Matando queries en RDS

Para matar la ejecución de una query que está haciendo mierda el server en RDS, si tenés una instancia de mysql tenés que hacer:

CALL mysql.rds_kill_query(process_id);

Para obtener el process_id, podés correr:

SHOW FULL processlist;

Happy hacking,
Aureliano

2015-01-19

Workarround Fibertel DNS en Lubuntu

En lubuntu, se me hizo medio complicado cambiar el DNS por default para las conexiones. Para workarroundear, lo que encontré es que, como me estoy conectando por dhcp, puedo tocar la configuración por defecto del dhclient.

Para eso edité /etc/dhcp/dhclient.conf y le puse que use el dns de google (8.8.8.8) como dns por default, Agregando la línea

prepend domain-name-servers 8.8.8.8;

justo antes de la línea que empieza con request.

Ahora usa el DNS de google antes de los de fibertel :D.

Happy hacking,
Aureliano

2015-01-06

web2py, DAL y las migraciones

Hace un tiempo estoy usando web2py. Web2py es un frameworks que ya viene con un montonazo de cosas para hacer páginas web. Una que estoy usando bastante es el layer de abstracción de datos (DAL), que te abstrae de la base de datos. El DAL, en teoría, se encarga de migrar la base cuando hay un cambio en el modelo de datos. Suena muy lindo, pero en la práctica tiene algunos problemillos.
¿Cómo hace para saber cómo migrar? En el directorio databases de la webapp genera unos archivos .table donde tiene guardada la estructura actual de la base y cuando evalúa los modelos los compara contra lo que tiene generado.Y cuando te conectás a la base desde un solo host, anda bien.
El problema es cuando clonás tu repo y te conectás a la base desde otro lado. ¿Qué hacer con esos archivos? Encima, el nombre de los archivos incluye como prefijo un hash del connection string. Entonces si cambiás el password deja de encontrarlos, si cambiás el nombre del host deja de cambiarlos, etc.
¿Entonces qué se puede hacer?

  1. Cuando construís el DAL podés pasarle el prefijo para las tablas por parámetro en el parámetro table_hash.
  2. Si no querés cambiar la base, también cuando construís el DAL, podés pasarle migrate=False.
  3. Creo que fake_migrate=True genera los archivos pero no altera la base y puede servir para generar las cosas que hacen falta para migrar después.
Pero esto es una chanchada. ¿Qué es lo que me gustaría a mi que pase?
  • Lo ideal es que web2py mire la estructura de la base de datos y en función de eso decida si tiene que migrar o no.
  • Si eso no es posible o es muy complicado, en vez de guardar archivos en un directorio debería guardar la información que necesita para hacer las migraciones de la base de datos en una tabla de la base de datos, así la información estaría en todos lados.
Si quieren ver los detalles, miren dentro de web2py la clase DAL que está en el archivo dal.py.

Happy hacking,
Aureliano.