Descubriendo las rake tasks
- Posted by Amaia on October 16, 2007 at 10:37 PM
- Comments: 1 (view/add your own)
- tags: rails, rake, tasks
Hasta hace poco sólo había usado rake para cosas típicas como
rake db:migrate
rake annotate_models
y otras de las que ya vienen definidas el Rails o en los plugins que instalo.
Pero para aprender a integrar los mapas de Google en el Directorio de Economía Social me hice con el libro "Beginning Google Maps Applications with Rails and Ajax" y ahí los ejemplos de geocodificación son con tareas rake, con lo que empecé a verles el enorme potencial que tienen. En la web de Railscasts hay un screencast bastante interesante sobre esto: Custom Rake Tasks.
Un ejemplo de geocodificacion de direcciones de empresas en el Directorio (fichero lib/tasks/geocode_empresas.rake):
task :geocode_empresas => :environment do
api_key=GOOGLE_MAPS_API_KEY
Empresa.find(:all).each do |empresa|
begin
if empresa.geocode_status == nil
empresa.geocode
puts "Empresa: #{empresa.nombre}"
puts "Dirección: #{empresa.direccion_completa}"
puts "geocode_status: #{empresa.geocode_status}"
puts "—"
end
rescue Exception => e
puts "Empresa: #{empresa.nombre}"
puts "Dirección: #{empresa.direccion_completa}"
puts "—Excepción—"
puts e
end
end # end each store
end # end rake task
Como es algo que puede tardar y no quería dejar al usuario esperando a que geocodificase su dirección al guardar la ficha de empresa, es algo que se hace desde la tarea rake, ya sea desde cron o línea de comnados en cualquier momento con:
rake geocode_empresas
Le cogí el gustillo y también las he usado para el BuscaBoe y son una buena opción para realizar tareas periódicas con cron. Si es una funcionalidad que se vaya a usar desde otra parte de la aplicación Rails lo nejor es sacarla a una librería y luego en la rake task llamar a las funciones que hagan falta:
Ejemplo de buscaboe:
require 'buscaboe'
task :buscaboe => :environment do
fecha = Date.today
begin
BuscaBoe.buscar(fecha)
rescue
end
end # end rake task
Para hacer lo mismo pero para un rango de fechas:
require 'buscaboe'
task :buscaboe_antiguos => :environment do
for fecha in Date.new(2007,10,1)..Date.new(2007,10,11)
begin
BuscaBoe.buscar(fecha)
rescue
puts "—excepcion—"
end # begin - rescue
end # for fecha
end # end rake task
Comments
There is 1 comment on this post. Post yours →
Mola un montón, gracias por descubrirme las rake tasks. Las integraré en Pagerankalert y Boris, es mejor opción que usar script/runner cada minuto por poder hacer varias tareas de golpe en una sola ejecución.
Post a comment
Required fields in bold.