Migrando datos desde PHP a Rails


Por esas cosas de la vida me encontré todo el día de hoy migrando datos viejos de un sistema hecho en PHP a uno hecho en Rails. Las cosas venían bastante simples definiendo modelos de ActiveRecord para las tablas de la base de datos vieja y reinsertando con modelos apuntando a las tablas nuevas. Pero … siempre hay un pero.

Resulta que el hermoso sistema anterior para evitar tener muchas tablas (o vaya a saber por qué) tenía en una parte un tabla donde cada field era un gran TEXT que contenía un array de PHP serializado.

class UserTextField < ActiveRecord::Base
  set_table_name "usertextfield"
  set_primary_key "userid"
 
  def folders
    field3
  end
end
 
$> user = UserTextField.find(3)
$> user.folders # => 'a:2:{i:0;s:4:"bkps";i:1;s:6:"listas";'

Justo cuando estaba por ponerme a parsear texto me encontré con php-serialize que permite serializar y deserializar estos string en cómodos tipos nativos de Ruby.

El código final queda entonces algo como :

class UserTextField < ActiveRecord::Base
  set_table_name "usertextfield"
  set_primary_key "userid"
 
  def folders
    PHP.unserialize(field3)
  end
end
 
$> user = UserTextField.find(3)
$> user.folders # => ["bkps", "listas"]

Y la migración de datos pudo continuar sin problemas :) .

Temas Relacionados

, , ,

  • Delicious
  • Facebook
  • Digg
  • Reddit
  • StumbleUpon
  • Twitter
  1. #1 by Aureliano on 25/01/2010 - 23:06

    Si hubiera estado en tu situación, me la hubiera jugado a hacer un script en PHP que deserialice el campo y lo transforme en algo que rails pueda leer más fácil (ya que no conocía php-serialize, ni me imaginaba que existiera). ¿Qué hizo que no tomaras ese camino?

    • #2 by Gazer on 26/01/2010 - 00:03

      No tomé ese camino porque simplemente no quiero programar más en PHP, salvo que sea super-estrictamente necesario :D

(will not be published)