Подтвердить что ты не робот

Объединение многих задач рейка в одну задачу рейка

Вместо того, чтобы выполнять каждую команду rake отдельно:

rake db:drop
rake db:create
rake db:migrate
rake db:load

Я хочу запустить одну команду rake, которая делает все для.

Это то, что у меня есть для моего 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

Вышеуказанное не работает, когда я запускаю его.

4b9b3361

Ответ 1

Вы хотите invoke не execute. Небольшой отрывок из моего собственного кода, показывающий, как передавать переменные:

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

В качестве альтернативы вы можете заставить задачу зависеть от другой задачи, как я сделал выше, с :create в зависимости от clients:creation:checks.

Чтобы уточнить, пространство имен предназначено для группировки задач, поэтому вы должны фактически определить задачи в пространстве имен, как указано выше. Вы не можете просто вызывать задачи из пространства имен.

Итак, ваш код должен быть:

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

Ответ 2

Вы можете сделать это с зависимостями от задачи без тела.

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

Ответ 3

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