Rake中任务名称的别名

当我需要别名某个任务的名字时,我应该怎么做?

例如,如何更改任务名称:

rake db:table rake db:create rake db:schema rake db:migration 

至:

 rake db:t rake db:c rake db:s rake db:m 

得到答案后编辑:

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

为什么需要别名? 您可以在没有任何代码的情况下引入新任务,但具有原始任务的先决条件。

 namespace :db do task :table do puts "table" end #kind of alias task :t => :table end 

这可以与参数结合:

 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 

要避免搜索参数名称,可以使用arg_names读取参数:

 #You can get the parameters of the original task :alias_task2, *Rake.application[:original_task].arg_names, :needs => :original_task 

将它与define_alias_task -method结合起来:

 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) 

用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