ruby on rails - rails - Combinando muchas tareas de rake en una tarea de rake
rake task rails (3)
Puedes hacerlo con dependencias en una tarea sin cuerpo.
desc ''This rebuilds development db''
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]
En lugar de ejecutar cada tarea de rake individualmente como esto:
rake db:drop
rake db:create
rake db:migrate
rake db:load
Quiero ejecutar una tarea de rake que hace todo por.
Esto es lo que tengo para mi rakefile:
desc ''This rebuilds development db''
namespace :rebuild_dev do
Rake::Task["db:drop"].execute
Rake::Task["db:create"].execute
Rake::Task["db:migrate"].execute
Rake::Task["db:load"].execute
end
Lo anterior no funciona cuando lo ejecuto.
Quieres invoke
no execute
. Un pequeño extracto de mi propio código que muestra cómo pasar variables:
namespace :clients do
task :create, [:client] => ["clients:creation:checks"] do |t, args|
Rake::Task["clients:creation:git"].invoke(client, password)
Rake::Task["server:virtualhost:create"].invoke(client)
Rake::Task["server:virtualhost:enable"].invoke(client)
Rake::Task["server:reload"].invoke
Rake::Task["db:roles:create"].invoke(client, password)
Rake::Task["db:create"].invoke(client, client)
Rake::Task["db:migrate"].invoke(client)
end
end
Alternativamente, puede hacer que la tarea dependa de otra tarea como lo he hecho anteriormente con :create
dependiendo de los clients:creation:checks
.
Solo para aclarar, un espacio de nombres es para agrupar tareas, por lo que debe definir las tareas dentro del espacio de nombres como lo he hecho anteriormente. No puedes simplemente llamar tareas desde un espacio de nombres.
Por lo que su código de arriba debe ser:
desc ''This rebuilds development db''
task :rebuild_dev do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
namespace :rebuild_dev do
desc ''This rebuilds development db''
task :clean_slate => :environment do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
end