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 about1.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/api1.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 taskTask 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!"
endChiamando 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!"
endparametri in ingresso
task :task_name, [:arg_1] => [:pre_1, :pre_2] do |t, args|
endnamespace
namespace :db do
desc "This task does nothing"
task :nothing do
end
endPer 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