Bạn muốn invoke
không execute
. Một trích đoạn nhỏ từ mã của riêng tôi cho thấy làm thế nào để vượt qua các biến:
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
Ngoài ra, bạn có thể làm nhiệm vụ phụ thuộc vào công việc khác như tôi đã làm ở trên với :create
tùy thuộc vào clients:creation:checks
.
Chỉ cần làm rõ, không gian tên là để nhóm các tác vụ, vì vậy bạn phải thực sự xác định các tác vụ trong vùng tên như tôi đã nêu ở trên. Bạn không thể đơn giản gọi các nhiệm vụ từ bên trong một không gian tên.
Vì vậy, mã của bạn ở trên nên là:
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
Nguồn
2009-12-11 20:38:09
Cảm ơn! Nó đã được gọi! – Amir
tại sao 'invoke', tôi có thể sử dụng' execute' có nghĩa là 'execute (client)' –
@AMICMING - 'execute' sẽ chỉ chạy tác vụ trong khi' invoke' sẽ chạy bất kỳ phụ thuộc nào. Ngoài ra, nó sẽ chỉ chạy tác vụ nếu cần. * Lưu ý: Đây là trường hợp cách đây 8 năm; Tôi thành thật không biết nếu nó đã thay đổi kể từ đó. * Http://chrisroos.co.uk/blog/2007-12-06-ruby-rake-invoke-vs-execute –