2009-12-11 7 views
24

に多くのすくいタスクを組み合わせる:代わりに、このように個別に各rakeタスクを実行しているのrakeタスク

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

私はすべてを行う1つの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 

上記の私はそれを実行したときに動作しません。

答えて

23

ご希望の場合invokeexecuteではありません。変数を渡す方法を示す自分自身のコードから少し抜粋は:

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 

また、あなたは私が:createclients: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 
+0

ありがとうございます!それは呼び出されました! – Amir

+0

なぜ 'invoke'を使うのですか' execute'は 'execute(client)'を意味します –

+1

@AMICMING - 'execute'はタスクだけを実行し、' invoke'は依存関係を実行します。さらに、必要な場合にのみタスクを実行します。 *注:これは8年前のケースでした。私は正直なところそれが変わったのかどうかはわかりません。* http://chrisroos.co.uk/blog/2007-12-06-ruby-rake-invoke-vs-execute –

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 
64

あなたがいない身体とタスクの依存関係でそれを行うことができます。

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

+1 - 興味深い。私はそれを知らなかった。答えをありがとう! –

+0

paramsをサブタスクに渡すとき、これはどのように機能しますか? –

関連する問題