Combining many rake tasks into one rake task Combining many rake tasks into one rake task ruby-on-rails ruby-on-rails

Combining many rake tasks into one rake task


You can do it with dependencies on a task with no body.

desc 'This rebuilds development db'task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]


You want invoke not execute. A little excerpt from my own code showing how to pass 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)  endend

Alternatively, you can make the task depend upon another task as I have done above with :create depending upon clients:creation:checks.

Just to clarify, a namespace is for grouping tasks, so you must actually define the tasks within the namespace as I have above. You can't simply call tasks from within a namespace.

So your code above should be:

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"].invokeend


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  endend