24

次のように各 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

上記は、実行すると機能しません。

4

3 に答える 3

68

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

desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]
于 2009-12-12T08:25:40.110 に答える
24

あなたはしたく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
于 2009-12-11T20:38:09.260 に答える
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
于 2009-12-11T20:43:03.203 に答える