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