首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rake中任务名称的别名

Rake中任务名称的别名
EN

Stack Overflow用户
提问于 2011-10-05 11:54:30
回答 2查看 6.9K关注 0票数 24

当我需要给某个任务起别名时,我该怎么做?

例如,如何将任务名称:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-05 20:55:21

为什么你需要一个别名?您可以在没有任何代码的情况下引入一个新任务,但必须以原始任务为前提。

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进行测试。

嗯,好吧,我发现这和几个小时前的solution RyanTM already posted差不多。

票数 41
EN

Stack Overflow用户

发布于 2011-10-05 13:12:07

下面是一些人写的代码: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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7656541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档