Thursday, March 07, 2013

Rails: Rakes


Sirven para crear y automatizar tareas. Algunas de las rakes más útiles que define rails pueden ser:

  • rake db:migrate: actualiza la base de datos. Con el parámetro VERSION=X, después del comando, la actualiza a la versión especificada.
  • rake stats:  nos da estadísticas de nuestra aplicación.
  • rake db:schema:load - Carga el fichero schema.rb en base de datos
  • rake db:fixtures:load - Carga los datos de las fixtures en el entorno de base de datos que especifiquemos. Puedes cargar fixtures especificas con FIXTURES=x,y
  • etc

 También nos podemos crear nuestras propias rakes. Para ello crearemos dentro de la estructura de carpeta lib/tasks un fichero terminado en .rake. La siguiente rake sirve para cargar datos de una o varias tablas en ficheros .yml:


namespace :db do
  desc 'Create YAML test fixtures from data in an existing database.
  Defaults to development database. Set RAILS_ENV to override.'

  task :load_data_table_to_yml => :environment do
    sql = "SELECT * FROM %s"
    skip_tables = ["schema_info", "sessions"]
    ActiveRecord::Base.establish_connection
    tables = ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : ActiveRecord::Base.connection.tables - skip_tables
    tables.each do |table_name|
      i = "000"
      if File.exists?("#{Rails.root}/test/fixtures/#{table_name}.yml")
      else
        File.new("#{Rails.root}/test/fixtures/#{table_name}.yml", "w+")
      end
      File.open("#{Rails.root}/test/fixtures/#{table_name}.yml", 'w') do |file|
        data = ActiveRecord::Base.connection.select_all(sql % table_name)
        file.write data.inject({}) { |hash, record|
          hash["#{table_name}_#{i.succ!}"] = record
          hash
        }.to_yaml
      end
    end
  end
end 
La forma de ejecutar esta rake sería:

rake db:load_data_table_to_yml

Donde si os fijais el 'db' es el namespace que definimos dentro de la rake y sirve para agrupar digamos tareas que son similares.Y 'load_data_table_to_yml' es el task que hemos definido en la rake. No tiene nada que ver con el nombre que le hemos dado al fichero .rake. Para pasarle parámetros se pasan a continuación de la instrucción en mayúsculas y dentro de la rake se recogen dentro de la variable de entorno ENV como se puede ver en el ejemplo.

No comments:

Post a Comment