91 Stimmen

Standardaufgabe für Namespace in Rake

In etwa so:

namespace :my_tasks do
  task :foo do
    do_something
  end

  task :bar do
    do_something_else
  end

  task :all => [:foo, :bar]
end

Wie kann ich die :all die Standardaufgabe sein, so dass die Ausführung von rake my_tasks aufruft (anstatt die rake my_tasks:all )?

1voto

tvw Punkte 318

Fügen Sie die folgende Aufgabe außerhalb des Namespace hinzu:

desc "Run all my tasks"
task :my_tasks => ["my_tasks:all"]

Denken Sie daran, dass Sie eine Aufgabe mit dem gleichen Namen wie der Namensraum haben können.

Und hier ein größeres Beispiel, das zeigt, wie man Tasks, die den gleichen Namen wie der Namespace haben, auch bei der Verschachtelung von Namespaces nutzen kann:

namespace :job1 do
  task :do_something1 do
        puts "job1:do_something1"
    end

  task :do_something2 do
        puts "job1:do_something2"
    end
  task :all => [:do_something1, :do_something2]
end

desc "Job 1"
task :job1 => ["job1:all"]

# You do not need the "all"-task, but it might be handier to have one.
namespace :job2 do
  task :do_something1 do
        puts "job2:do_something1"
    end

  task :do_something2 do
        puts "job2:do_something2"
    end
end

desc "Job 2"
task :job2 => ["job2:do_something1", "job2:do_something2"]

namespace :superjob do
    namespace :job1 do
        task :do_something1 do
            puts "superjob:job1:do_something1"
        end

        task :do_something2 do
            puts "superjob:job1:do_something2"
        end
    end

    desc "Job 1 in Superjob"
    task :job1 => ["job1:do_something1", "job1:do_something2"]

    namespace :job2 do
        task :do_something1 do
            puts "superjob:job2:do_something1"
        end

        task :do_something2 do
            puts "superjob:job2:do_something2"
        end
    end

    desc "Job 2 in Superjob"
    task :job2 => ["job2:do_something1", "job2:do_something2"]
end

desc "My Super Job"
task :superjob => ["superjob:job1", "superjob:job2"]

# Do them all just by calling "$ rake"
task :default => [:job1, :job2, :superjob]

Kopieren Sie es einfach und probieren Sie es aus.

0voto

x'ES Punkte 484

Basierend auf der Lösung von Rocky Standardaufgabe für Namespace in Rake

Und die Antwort des Dexters Gibt es eine Möglichkeit, die aktuelle Rake-Aufgabe zu erfahren?

namespace :root do
  namespace :foo do
  end

  namespace :target do
    task :all do |task_all|
      Rake.application.in_namespace(task_all.scope.path) do |ns|
        ns.tasks.each { |task| task.invoke unless task.name == task_all.name } 
      end
    end

    task :one do
    end

    task :another do
    end
  end
end

0voto

Alexander Presber Punkte 6087

Ich kombiniere die Antworten von Szymon Lipinski und Shyam Habarakada und gebe hier die meiner Meinung nach idiomatischste und konsistenteste Antwort:

namespace :my_tasks do
  task :foo do
    do_something
  end

  task :bar do
    do_something_else
  end

end

task :my_tasks => ["my_tasks:foo", "my_tasks:bar"]

ermöglicht es Ihnen rake my_tasks und vermeidet gleichzeitig den umständlichen Aufruf der Teilaufgaben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X