【问题标题】:Rake before task hook任务挂钩前耙
【发布时间】:2013-03-29 17:05:38
【问题描述】:

是否有直接的方法来修改 Rake 任务以在运行现有任务之前运行一些代码?我正在寻找等效于增强的东西,它在任务的开始而不是结束时运行。

Rake::Task['lame'].enhance(['i_run_afterwards_ha_ha'])

【问题讨论】:

  • 任务必须叫lame,不能叫not_so_lame,在调用lame之前运行一些代码? Rake::Task["lame"].invoke
  • 你的回复我一定有什么不明白的地方吗?你在暗示什么“必须叫lame,不能叫not_so_lame”?

标签: ruby rake


【解决方案1】:

您可以使用 Rake 任务的依赖项来执行此操作,并且 Rake 允许您重新定义现有任务。

Rakefile

task :your_task do
  puts 'your_task'
end
task :before do
  puts "before"
end
task :your_task => :before

结果

$ rake your_task
before
your_task

【讨论】:

  • 我尝试了上面的语法,但这对我不起作用。而且我认为增强可以设置为在任务之前或之后运行某些东西。我也没有运气。进一步深入研究我想要为我的自定义行为添加前缀的现有任务,我意识到它已经设置为依赖项 :visable_task => :undercover 当我试图将我的行为添加到 :visable_task => :my_deps 这是最后运行。相反,将我的依赖设置为 :undercover => :my_deps 一切都按我的预期工作。
  • 我已经接受了你的回答,因为它肯定是正确的;下次我会做一些进一步的挖掘!谢谢!
  • 您应该定义一个新任务,然后将其添加为先决条件,将您的任务全名作为第一个参数传递给 .enhance()。详细解释见这里dan-manges.com/blog/modifying-rake-tasks :-)
  • 请注意,这并不像您想象的那样工作。您应该使用打印订单的-ndry-run rake 标志检查流程。就我而言,我想在rake release 之前放一个东西,但它似乎由几个任务组成,我的钩子放在中间。相反,我不得不预先添加build 任务——这并不明显,如果我没有足够的注意力来检查试运行,它就会工作不正确。也许是因为那些子任务已经以同样的方式附加到release,idk。
【解决方案2】:

或者你可以使用 rake-hooks gem 来做之前和之后的钩子:

https://github.com/guillermo/rake-hooks

namespace :greetings do 
    task :hola    do puts "Hola!" end ;
    task :bonjour do puts "Bonjour!" end ;
    task :gday    do puts "G'day!" end ;  
end 

before "greetings:hola", "greetings:bonjour", "greetings:gday" do
  puts "Hello!"
end

rake greetings:hola # => "Hello! Hola!" 

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 2018-12-20
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多