Muitos utilizam o rake sem ao menos saber o que ele é. Você mesmo já deve estar acostumado a rodar o comando rake db:migrate , certo?
Bem, o objetivo desse post não é explicar em detalhes o que é o rake, mas sim em como customizá-lo. Portanto, de forma resumida, ele é nada mais do que uma gem que quando instalada utiliza-se do executável ‘rake’ para demandar suas tarefas. A idéia é de que funcionasse como o ‘make’ do Unix, ou seja, um Ruby Make, se assim posso dizer hehe. Contudo, entre piadinhas ruins a parte, o rake é responsável por executar tarefas em sua aplicação.
O rails precisa que você executa o rake a partir da raiz do projeto para que ele acesse o seu RakeFile. Só por uma questão de investigação, abra o seu RakeFile:
1 2 3 4 |
require File.expand_path('../config/application', __FILE__) require 'rake' Project::Application.load_tasks</pre> |
require File.expand_path('../config/application', __FILE__)
require 'rake'
Project::Application.load_tasks</pre>
A partir daí, ele prepara o ‘ambiente’ para todas as tarefas que existirem, customizadas ou não.
Customizando.
O acesso que você possui para customizar tarefas é em /lib/tasks. Neste exemplo, vou mostrar como configurar uma tarefa de seed específico para um rake db:seed, veja o resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# libs/tasks/ namespace :db do # poderia ser qualquer outra coisa que seguisse os padrões do :db namespace :seed do # qualquer coisa. task :galeria => :environment do #exemplo desabilitando uma galeria galeria = Attribute.find_by_name('Galeria') if galeria galeria.update_attributes(:code => 1, :name => "Galeria", :installed => 0) galeria.save end end end end |
# libs/tasks/
namespace :db do
# poderia ser qualquer outra coisa que seguisse os padrões do :db
namespace :seed do
# qualquer coisa.
task :galeria => :environment do
#exemplo desabilitando uma galeria
galeria = Attribute.find_by_name('Galeria')
if galeria
galeria.update_attributes(:code => 1, :name => "Galeria", :installed => 0)
galeria.save
end
end
end
end
Ao executar rake db:seed:galeria, vou ter minha galeria desabilitada.
É isso aí e até o próximo!
Referências:
http://databasically.com/2008/08/03/rake-list-tasks/ | Lista com várias tasks para :db
http://www.tutorialspoint.com/ruby-on-rails/rails-and-rake.htm
http://akitaonrails.com/2009/02/16/automatizando-tarefas-com-ruby-e-rake
