Rake의 네임 스페이스에 대한 기본 작업
다음과 같이 주어집니다.
namespace :my_tasks do
task :foo do
do_something
end
task :bar do
do_something_else
end
task :all => [:foo, :bar]
end
:all
기본 작업을 실행 rake my_tasks
하면을 호출하는 대신 호출 하도록 어떻게해야 rake my_tasks:all
합니까?
다음과 같이 네임 스페이스 외부에 배치합니다.
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"]
또한 ... 작업에 인수가 필요한 경우 :
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
두 번째 예제에서 네임 스페이스와 동일한 이름 (예 : 'my_tasks')으로 작업을 호출 할 수있는 방법에 유의하십시오.
별로 직관적이지는 않지만 이름이 같고 원하는 것을 효과적으로 제공하는 네임 스페이스와 작업을 가질 수 있습니다. 예를 들어
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
이제 다음과 같은 명령을 실행할 수 있습니다.
rake my_task:foo
과
rake my_task
네임 스페이스에 많은 작업이있는 경우 이것을 사용하는 것이 좋습니다.
task :my_tasks do
Rake.application.in_namespace(:my_tasks){|x| x.tasks.each{|t| t.invoke}}
end
그런 다음 다음을 수행하여 네임 스페이스의 모든 작업을 실행할 수 있습니다.
rake my_tasks
이렇게하면 해당 네임 스페이스에 새 작업을 추가 할 때 : all 작업을 변경하는 것에 대해 걱정할 필요가 없습니다.
이 Rakefile을 오이에 사용합니다.
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"
그런 다음 입력하면 :
rake
It runs the default task, which runs both fast and slow tests.
I learned this from Cheezy's blog.
The way I'm reading obvio171's question is that he is asking1) for a systematic way to invoke a certain task in a namespace by invoking the namespace as a task.
I've frequently encountered the same need. I like to logically group tasks into namespaces. Often that grouping resembles a hierarchy. Hence the desire to invoke the group makes very much sense to me.
Here's my take. Let me know what you think.
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)...or was asking, years ago. Nonetheless a still interesting question.
Add the following task outside of the namespace:
desc "Run all my tasks"
task :my_tasks => ["my_tasks:all"]
Keep in mind, that you can have a task with the same name as the namespace.
And hier a bigger example, that shows, how you can make use of tasks, which have the same name as the namespace, even when nesting namespaces:
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]
Just copy it and try it out.
Based on Rocky's solution Default task for namespace in Rake
And this dexter's answer Is there a way to know the current rake task?
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
참고URL : https://stackoverflow.com/questions/1579231/default-task-for-namespace-in-rake
'Programing' 카테고리의 다른 글
npm uninstall을 사용할 때 package.json에서 종속성 자동 제거 (0) | 2020.09.21 |
---|---|
Keras 모델을 GPU에서 실행할 수 있습니까? (0) | 2020.09.21 |
두 개의 Java 메소드가 다른 리턴 유형으로 동일한 이름을 가질 수 있습니까? (0) | 2020.09.21 |
Symfony2의 Twig 템플릿 엔진에 개체가 있는지 어떻게 확인합니까? (0) | 2020.09.21 |
경로 이름에 공백이있는 디렉토리로 cd 할 Bash 스크립트 (0) | 2020.09.21 |