Ответ 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