我基本上试图将此问题的解决方案转换为rake任务:How do I find the source file for a rake task?
我想打字,例如:
rake meta:where[test]
获取定义测试任务的路径。这是我所拥有的,有一些不必要的东西,所以我可以做一些相关的评论:
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
所以,把tsk实际输出'test',这意味着(我想!)我正确地在这里定位任务。使用相同的代码(如上面提到的SO帖子)从rails控制台打印路径没有问题。它说的是:
/Users/me/.rvm/gems/ruby-1.9.3-p362/gems/railties-3.2.11/lib/rails/test_unit/testing.rake:49:in `<top (required)>'
知道如何获取要打印的位置吗?
答案 0 :(得分:2)
如上所述,链接问题的代码有效,例如
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
访问权限必须如此复杂,我仍然很想知道!