当我需要别名某个任务的名字时,我该怎么做?
例如,如何更改任务名称:
rake db:table
rake db:create
rake db:schema
rake db:migration
Run Code Online (Sandbox Code Playgroud)
至:
rake db:t
rake db:c
rake db:s
rake db:m
Run Code Online (Sandbox Code Playgroud)
得到答案后编辑:
def alias_task(tasks)
tasks.each do |new_name, old_name|
task new_name, [*Rake.application[old_name].arg_names] => [old_name]
end
end
alias_task [
[:ds, :db_schema],
[:dc, :db_create],
[:dr, :db_remove]
]
Run Code Online (Sandbox Code Playgroud)
knu*_*nut 38
为什么需要别名?您可以在没有任何代码的情况下引入新任务,但具有原始任务的先决条件.
namespace :db do
task :table do
puts "table"
end
#kind of alias
task :t => :table
end
Run Code Online (Sandbox Code Playgroud)
这可以与参数结合:
require 'rake'
desc 'My original task'
task :original_task, [:par1, :par2] do |t, args|
puts "#{t}: #{args.inspect}"
end
#Alias task.
#Parameters are send to prerequisites, if the keys are identic.
task :alias_task, [:par1, :par2] => :original_task
Run Code Online (Sandbox Code Playgroud)
要避免搜索参数名称,您可以使用以下方法读取参数arg_names:
#You can get the parameters of the original
task :alias_task2, *Rake.application[:original_task].arg_names, :needs => :original_task
Run Code Online (Sandbox Code Playgroud)
将它与一个define_alias_task方法结合起来:
def define_alias_task(alias_task, original)
desc "Alias #{original}"
task alias_task, *Rake.application[original].arg_names, :needs => original
end
define_alias_task(:alias_task3, :original_task)
Run Code Online (Sandbox Code Playgroud)
用ruby 1.9.1和rake-0.8.7测试.
嗯,好吧,我看到RyanTM在几个小时前已经发布了或多或少完全相同的解决方案.
以下是有人编写的代码:https://gist.github.com/232966
def alias_task(name, old_name)
t = Rake::Task[old_name]
desc t.full_comment if t.full_comment
task name, *t.arg_names do |_, args|
# values_at is broken on Rake::TaskArguments
args = t.arg_names.map { |a| args[a] }
t.invoke(args)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6237 次 |
| 最近记录: |