Esempione: https://github.com/novelys/production_chain/blob/master/lib/production_chain/tasks/db.rake

Rake significa “ruby make” e sostituisce l’utility unix make e utilizza un Rakefile o un file .rake per costruire una lista di task da eseguire. Con l’istruzione rake --tasks ottengo tutti i tak che posso eseguire su una determinata directory

1.1 about

Fornisce informazioni generali sulla versione di Ruby, RubyGems, Rails e i suoi sottocomponenti…

rake about
1.2 assets
rake assets:precompile # precompila gli assets
rake assets:clean # rimuove gli assets compilati
rake assets:clobber #elimina tutto il contenuto di public/assets
 
1.3 db
rake db:drop #droppa il DB
rake db:create #crea il DB
rake db:migrate #lancia le migration pendenti
rake db:seed #lancia il seed.rb
rake db:setup #crea il DB, lo schema e lo inizializza con i seed
rake db:reset #esegue il drop e il setup
rake db:schema:dump #aggiorna il file db/schema.rb
rake db:rollback #rollback dell'ultima migrazione
rake db:rollback STEP=3 # rollback delle ultime 3 migrazioni
rake db:migrate:redo #esegue un rollback e riesegue la migration
rake db:migrate:redo STEP=3 #analogo ma con 3 migration
 
1.4 doc
rake doc:app # documentazione per l'app in doc/app
rake doc:guides #guida per l'app in doc/guides
rake doc:rails # documentazione per l'API in doc/api
1.5 notes

Cerca nel codice per dei commenti che cominciano con FIXME, OPTIMIZE o TODO e fornisce un output leggibile

1.6 routes

elenco delle route

1.7 tmp

La cartella tmp creata da Rails e dove vengono memorizzati file temporanei come le sessioni, PID o azioni in cache.

rake tmp:cache:clear # clears tmp/cache.
rake tmp:sessions:clear # clears tmp/sessions.
rake tmp:sockets:clear # clears tmp/sockets.
rake tmp:clear # clears all the three: cache, sessions and sockets.
rake tmp:create # creates tmp directories for sessions, cache, sockets, and pids.
1.8 stats

Elenco di varie statistiche del codice

1.9 secret

Fornisce una chiave pseudo casuale che può essere usata come tok

Task personalizzati

I task personalizzati hanno estensione .rake e sono in Rails.root/lib/tasks e si possono creare con un generator nel seguente modo:

rails generate task

Task che dipendono da altri

task :turn_off_alarm do
puts "Turned off alarm. Would have liked 5 more minutes, though."
end
 
task :make_coffee do
cups = ENV["COFFEE_CUPS"] || 2
puts "Made #{cups} cups of coffee. Shakes are gone."
end
 
task :ready_for_the_day => [:turn_off_alarm, :make_coffee] do
puts "Ready for the day!"
end

Chiamando il task ready_for_the_day verranno chiamati tutti gli altri taks

=> rake ready_for_the_day
Turned off alarm. Would have liked 5 more minutes, though.
Made 5 cups of coffee. Shakes are gone.
Ready for the day!

Al task chiamato make_coffee posso passare parametri come ENV

=> rake COFFEE_CUPS=5 make_coffee
Made 5 cups of coffee. Shakes are gone.

Invocare un task dentro un altro

Uso il comando invoke

task :make_coffee do
Rake::Task['morning:make_coffee'].invoke
puts "Ready for the rest of the day!"
end

parametri in ingresso

task :task_name, [:arg_1] => [:pre_1, :pre_2] do |t, args|
end

namespace

namespace :db do
desc "This task does nothing"
task :nothing do
end
end

Per esempio, vogliamo creare un task che invia una mail a tutti gli utenti che hanno un account che sta per scadere

namespace :accounts do
desc "Email expiring accounts to let them know"
task :email_expiring => :environment do
date = ENV['from'] ? Date.parse(ENV['from']) : Date.today
Account.notify_expiring(date)
end
end