【问题标题】:How do I find the filesystem location of another rake task from a rake task?如何从 rake 任务中找到另一个 rake 任务的文件系统位置?
【发布时间】:2013-01-24 17:24:35
【问题描述】:

我基本上是在尝试将这个问题的解决方案转换为 rake 任务:How do I find the source file for a rake task?

我想输入,例如:

rake meta:where[test]

并获取定义测试任务的路径。这是我所拥有的,一些不必要的东西,所以我可以制作一些相关的 cmets:

Rake::TaskManager.record_task_metadata=true

namespace :meta do
  desc "meta:where[taskname] - where is taskname defined?"
  task :where, [:taskname] do |t, args|
    tsk = Rake.application.tasks.each.find {|t| t.name == args.taskname}
    puts tsk
    tsk.locations.each {|x| puts x}
  end
end

因此, puts tsk 实际上输出了“test”,这意味着(我认为!)我在这里正确定位了任务。使用相同的代码从 rails 控制台打印路径没有问题(如上述 SO 帖子中所示)。它说的是:

/Users/me/.rvm/gems/ruby-1.9.3-p362/gems/railties-3.2.11/lib/rails/test_unit/testing.rake:49:in `<top (required)>'

知道如何获取要打印的位置吗?

【问题讨论】:

  • 神秘的是,链接问题中的代码已更改,现在它在 rake 任务中对我有用...

标签: ruby rake rake-task


【解决方案1】:

如上所述,来自链接问题的代码有效,例如

namespace :meta do
  desc "meta:where[taskname] - where is taskname defined?"
  task :where, [:taskname] do |t, args|
    puts "looking for #{args.taskname}"
    tsk = Rake.application[args.taskname]
    # It is mysterious to me why this would need to be so complicated
    puts tsk.actions.map(&:source_location)
  end
end

但如果有人能解释为什么上面问题中的代码不起作用,或者为什么source_locations 访问必须如此复杂,我仍然很想知道!

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2014-02-27
    • 2012-04-03
    • 2013-05-12
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多