Rake'deki ad alanı için varsayılan görev


88

Şöyle bir şey verildiğinde:

namespace :my_tasks do
  task :foo do
    do_something
  end

  task :bar do
    do_something_else
  end

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

:allVarsayılan görev nasıl olurum , böylece koşmak rake my_tasksonu çağırır (aramak zorunda kalmak yerine rake my_tasks:all)?


ad alanına bir varsayılan koymayı denediniz mi (görev: varsayılan =>: tümü)
Jim Deville

Jim'in tarif ettiği şeyi yapın, yalnızca varsayılan görev ad alanının dışına çıkar ve ad alanını ve görev adını içermelidir. (görev: default => "my_tasks: all") Çalışan bir örnek için aşağıdaki cevabıma bakın.
Randy Eppinger

Yanıtlar:


88

Bunu şu şekilde ad alanının dışına yerleştirin:

namespace :my_tasks do
  task :foo do
    do_something
  end

  task :bar do
    do_something_else
  end

end

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

Ayrıca ... görevleriniz bağımsız değişkenler gerektiriyorsa:

namespace :my_tasks do
  task :foo, :arg1, :arg2 do |t, args|
    do_something
  end

  task :bar, :arg1, :arg2  do |t, args|
    do_something_else
  end

end

task :my_tasks, :arg1, :arg2 do |t, args|
  Rake::Task["my_tasks:foo"].invoke( args.arg1, args.arg2 )
  Rake::Task["my_tasks:bar"].invoke( args.arg1, args.arg2 )
end

2. örnekte göreve ad alanıyla aynı adı, yani 'görevlerim' diyebileceğinize dikkat edin.


4
Bu sadece olarak adlandırılabilmesini sağlar rake all. Bu durumda, başka ad alanlarına sahibim, bu nedenle istediğim, görevi my_tasks:allolarak rake my_tasksdeğil, olarak adlandırabilmektir rake all.
Helder S Ribeiro

53
Öyleyse şunu kullanın: task: my_tasks => ["my_tasks: foo", "my_tasks: bar"]
Szymon Lipiński

2
Simon'ın yorumuna oy verildi, bunu böyle yaptığımı unutmuştum.
Jim Deville

52

Çok sezgisel değil, ancak bir ad alanına ve aynı ada sahip bir göreve sahip olabilirsiniz ve bu size istediğiniz şeyi etkili bir şekilde verir. Örneğin

namespace :my_task do
  task :foo do
    do_foo
  end
  task :bar do
    do_bar
  end
end

task :my_task do
  Rake::Task['my_task:foo'].invoke
  Rake::Task['my_task:bar'].invoke
end

Şimdi şu gibi komutları çalıştırabilirsiniz:

rake my_task:foo

ve

rake my_task

3
bu harika ve soruda belirtilen tüm gereksinimleri kapsıyor.
Ivar

1
Bence çağrı aşırı karmaşık ve sadece görev bağımlılıkları olmalı:task :my_task => ['my_task:foo', 'my_task:bar']
Alexander Presber

8

Ad alanında çok sayıda göreviniz varsa bunu kullanmanızı öneririm.

task :my_tasks do
  Rake.application.in_namespace(:my_tasks){|x| x.tasks.each{|t| t.invoke}}
end

Ve sonra ad alanındaki tüm görevleri şu şekilde çalıştırabilirsiniz:

rake my_tasks

Bununla, o ad alanına yeni görevler eklediğinizde: all görevinizi değiştirmek için endişelenmenize gerek yok.


3

Bu Rakefile'ı salatalık için kullanıyorum:

require 'cucumber'
require 'cucumber/rake/task'

namespace :features do
  Cucumber::Rake::Task.new(:fast) do |t|
    t.profile = 'fast'
  end

  Cucumber::Rake::Task.new(:slow) do |t|
    t.profile = 'slow'
  end

  task :ci => [:fast, :slow]
end

task :default => "features:ci"

O zaman sadece yazarsam:

rake

Hem hızlı hem de yavaş testleri çalıştıran varsayılan görevi çalıştırır.

Öğrendiğim bu gelen Cheezy günlüğü .


3

Obvio171'in sorusunu okuma şeklim, 1) ad alanını bir görev olarak çağırarak belirli bir görevi bir ad alanında çağırmanın sistematik bir yolunu sormasıdır .

Aynı ihtiyaçla sık sık karşılaştım. Görevleri mantıksal olarak ad alanlarında gruplamayı seviyorum. Genellikle bu gruplama bir hiyerarşiye benzer. Dolayısıyla grubu çağırma arzusu bana çok mantıklı geliyor.

İşte benim almam:

module Rake::DSL
  def group(name, &block)
    ns = namespace name, &block
    default = ns[:default]
    task name => "#{name}:default" if default
    ns
  end
end

group :foo do
  task :foo1 do |t| puts t.name end
  task :foo2 do |t| puts t.name end
  task :default => [:foo1, :foo2]
end

task :default => :foo

1) ... ya da yıllar önce soruyordu. Yine de ilginç bir soru.


1

Aşağıdaki görevi ad alanının dışına ekleyin:

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

Ad alanıyla aynı ada sahip bir göreve sahip olabileceğinizi unutmayın.

Ve ad alanlarını iç içe yerleştirirken bile ad alanıyla aynı ada sahip görevleri nasıl kullanabileceğinizi gösteren daha büyük bir örnek daha var:

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]

Sadece kopyalayın ve deneyin.



0

Szymon Lipiński'nin ve Shyam Habarakada'nın cevaplarını birleştirdiğimde, bence en deyimsel ve makul cevap şu:

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"]

rake my_tasksalt görevlerin hantal çağrılmasından kaçınırken yapmanıza olanak sağlar .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.