ruby 如何在定义rake任务后向其添加描述?

jvidinwx  于 2023-10-17  发布在  Ruby
关注(0)|答案(2)|浏览(109)

一个典型的rake任务定义如下:

desc "Set the environment value for the database"
task "environment:set" => [:environment, :load_config] do
  ActiveRecord::InternalMetadata.create_table
  ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
end

但是如果它没有desc,而我想稍后在运行时中添加它,在执行了包含任务定义的文件之后。比如desc "this is the documentation", task: :taskname。这可能吗?

o0lyfsai

o0lyfsai1#

尽管这是一个相当老的问题,我张贴我的答案,任何人登陆这里从谷歌搜索。
一个任务可以被多次提及,每次在它之前的desc都会添加(而不是替换)给定的描述。我们也可以使用任务对象上的方法来达到相同的效果:

# Rakefile

desc 'Foo 1'
task :foo

desc 'Foo 2'
task :foo

task(:foo).add_description 'Foo 3'
task(:foo).comment = 'Foo 4'
rake -T
# => rake foo  # Foo 1 / Foo 2 / Foo 3 / Foo 4

“在任务执行之后”的概念有点不清楚,它是指执行任务定义还是任务体。后者取决于Rake的依赖性和新近度解析,因此任务主体可能永远不会被执行。
无论如何,从技术上讲,我们可以随时调用#add_description#comment=,* 甚至在任务体中 *。虽然我想不出实际的效果,因为描述只显示了rake -Trake -D不执行任何任务。

task :foo do |t|
  # ...
  t.add_description 'executed' # technically possible, but to what avail?
end
wbrvyc0a

wbrvyc0a2#

是的,你可以在事实之后添加一个desc,只要它直接在“task”方法之上。
到Github repo的链接已经断开,但是如果你查看at the source here,你可以看到desc只是在调用rake -T时附加一个字符串。

相关问题