Tarea rake para borrar las sesiones que no se han utilizado en las ultimas 3 horas.
desc "Borrar de la base de datos la sesiones que han expirado ."
task :delete_old_sessions => :environment do
sesiones = ActiveRecord::SessionStore::Session.find(:all, :conditions => ['updated_at < ?', 3.hours.ago])
sesiones.each {|s| s.delete}
end
Hoy estaba usando RailRoad para generar los diagramas de modelos y de controladores de un proyecto Rails en el que estoy trabajando y he visto que en la página de RailRoad venía el código (gracias a Thomas Ritz) de una tarea rake que genera los diagramas en svg y los deja en el directorio doc de la aplicación.
Como también quería que generase los diagramas en png la he modificado para que los incluya. Queda así (lib/tasks/diagrams.rake):
# Rake task tomada de la página de Railroad (http://railroad.rubyforge.org/)
# Gracias a Thomas Ritz por el código (http://www.galaxy-ritz.de/)
# Modificada por Amaia Castro (amaia@dabne.net) para incluir la generación de
# diagramas en png.
namespace :doc do
namespace :diagram do
task :models do
sh "railroad -i -l -a -m -M | dot -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/models.svg"
end
task :models_png do
sh "railroad -i -l -a -m -M | dot -Tpng | sed 's/font-size:14.00/font-size:11.00/g' > doc/models.png"
end
task :controllers do
sh "railroad -i -l -C | neato -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/controllers.svg"
end
task :controllers_png do
sh "railroad -i -l -C | neato -Tpng | sed 's/font-size:14.00/font-size:11.00/g' > doc/controllers.png"
end
end
task :diagrams_svg => %w(diagram:models diagram:controllers)
task :diagrams_png => %w(diagram:models_png diagram:controllers_png)
task :diagrams => %w(diagram:models diagram:models_png diagram:controllers diagram:controllers_png)
end
Para que funcione hay que tener instalada la gem railroad y, en Ubuntu (y otros linux supongo), el paquete graphviz, que es el que contiene dot y neato, para hacer la conversion de DOT a svg o png.
Luego en nuestra aplicación rails ejecutar rake doc:diagrams para generar todos los diagramas o rake doc:diagram:models para generar el de modelos en svg, por ejemplo.
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
+ leer más