Quando eu ouvia falar de criar rake tasks eu achava que devia ser algo complexo, mas esses dias precisei criar um script Ruby para popular o banco de minha aplicação e o Cassio Marques me falou pra dar uma olhada nesse tipo de arquivo, me impressionei com o quão simples é criar uma.
Para criar uma rake task crie um arquivo com a extensão .rake dentro do diretório lib/tasks de sua aplicação. Exemplo:
lib/tasks/example.rakeDentro do arquivo abra um bloco como o do exemplo:

Dentro desse bloco você pode escrever script Ruby, por exemplo:

A partir daí você já pode executar:
rake my_new_rake_taskO resultado será:
$ rake my_new_rake_task
(in /Users/bruno/projetos/scafold)
HelloVocê pode também adicionar uma descrição para ela, assim ela aparecerá na lista de taks do rake:

Para ver a sua task na lista execute o comando:
rake -TOu, para achar ela de uma forma mais fácil:
rake -T | grep newComo resultado, dentre a lista que aparecer você encontrará:
rake my_new_rake_task # Just an exampleCaso você precise do ambiente Rails carregado para executar o seu script, na hora de abrir o bloco faça da seguinte forma:
task :name => :environment doComo no exemplo:

Você pode criar mais de uma task por arquivo:

Bom é isso pessoal, a partir daí basta utilizar o poder do Ruby e do Rails para criar as mais diversas tarefas.
Espero que o post ajude e até o próximo.


5 comentários:
Oi,você mora em Vitória,e é neto da Dona Alzira?
Opa bixo,
Mó legal esse lance de rake... Seguinte estou procurando um jeito de chamar outras rake tasks apartir de uma inicial... ex.: Tenho que controlar acessos ao sistema apartir dos controllers para isso tenho que mapeá-los no meu banco.
Então eu criei uma task chamada perm:sync que manda tudo o que eu tenho na minha app (controllers e actions) para dentro do banco... Agora eu estou fazendo uma task chamada app:install... que no mais vai rodar o db:create, db:migrate, perm:sync, criar admin do sistema, etc... estou procurando um jeito mais fancy do que `aspas nojentas`.
Se souber de algo responde ae...
abs...
Olá Pablo,
Então, acho que não conheço nada mais fancy.
Geralmente a gente usa `comando` quando queremos guardar o resultado numa variável. Exemplo:
result = `rake db:migrate`
Se essa não é a intenção, você pode usar também:
system 'rake db:migrate'
Ou até, mais explícito:
Kernel.system 'rake db:migrate'
Abraços,
Bruno.
Great!
Mas acho que vou continuar com essas nasty quotes, até que não ficou tão estranho assim:
namespace :app do
task :install do
puts `rake db:create`
puts `rake db:migrate`
puts `rake perm:sync`
puts `rake app:create_user_roles`
end
end
Valew ae pela dica!!
abs,
Targa
Ok Pablo,
Mas se você utilizar o "system" você não precisa usar o "puts".
Abraços.
Postar um comentário