Objetivo: Usar una tarea CRON (u otro evento programado) para actualizar la base de datos con la exportación nocturna de datos desde un sistema existente.¿Cómo escribir una tarea de Rake para importar datos a la aplicación Rails?
Todos los datos se crean/actualizan/eliminan en un sistema existente. El sitio web no se integra directamente con este sistema, por lo que la aplicación Rails simplemente debe reflejar las actualizaciones que aparecen en la exportación de datos.
Tengo un archivo de ~ 5.000 productos .txt
que tiene este aspecto:
"1234":"product name":"attr 1":"attr 2":"ABC Manufacturing":"2222"
"A134":"another product":"attr 1":"attr 2":"Foobar World":"2447"
...
Todos los valores son cadenas entre comillas dobles ("
) que están separados por dos puntos (:
)
campos son :
id
: id único; alfanumériconame
: nombre del producto; cualquier carácter- columnas de atributo: cadenas; cualquier carácter (por ejemplo, tamaño, peso, color, dimensión)
vendor_name
: cadena; cualquier caráctervendor_id
: id único del vendedor; numérico
La información del vendedor no está normalizada en el sistema actual.
¿Cuáles son las mejores prácticas aquí? ¿Está bien eliminar las tablas de productos y proveedores y reescribir con los nuevos datos en cada ciclo? ¿O es mejor solo agregar nuevas filas y actualizar las existentes?
Notas:
- Estos datos serán utilizados para generar
Orders
que persistirá a través de la importación de base de datos todas las noches.OrderItems
tendrá que estar conectado a los identificadores de productos que se especifican en el archivo de datos, por lo que no podemos confiar en que una clave principal de incremento automático sea la misma para cada importación; la identificación alfanumérica única tendrá que ser utilizada para unirproducts
aorder_items
. - Idealmente, me gustaría que el importador para normalizar los datos de los proveedores
- que no puedo utilizar declaraciones de vainilla SQL, así que me imagino que voy a necesitar para escribir una tarea
rake
con el fin de utilizar la sintaxis de estilo yProduct.create(...)
Vendor.create(...)
. - Esto se implementará en EngineYard
he intentado esto, pero estoy consiguiendo el error 'variable local o método no definido 'datos' para las principales: Object'. ¿Alguna idea de por qué esto podría estar pasando? – Nick
El problema era que '' namespace data do' tenía que cambiarse a 'namespace: data do'. – Nick