Ruby on rails 如何在Rails模型中获取当前rake任务的名称?
我对其中一个支持ActiveModel缓存的gem有一些问题。当我使用observer for cached model时,在应用程序初始化期间,它会尝试描述表以获取所有字段的名称Ruby on rails 如何在Rails模型中获取当前rake任务的名称?,ruby-on-rails,rake,activemodel,Ruby On Rails,Rake,Activemodel,我对其中一个支持ActiveModel缓存的gem有一些问题。当我使用observer for cached model时,在应用程序初始化期间,它会尝试描述表以获取所有字段的名称 在运行rake任务时也会执行相同的操作,包括db:migration。在这种情况下,存在一些循环参考误差。我想检测当前的rake任务,跳过gem初始化,但我不知道如何找出代码是通过rake任务调用的。如何检查它?我不知道您正试图做什么,但这里有一个获取任务名称的示例 task :testing do |task_
在运行rake任务时也会执行相同的操作,包括db:migration。在这种情况下,存在一些循环参考误差。我想检测当前的rake任务,跳过gem初始化,但我不知道如何找出代码是通过rake任务调用的。如何检查它?我不知道您正试图做什么,但这里有一个获取任务名称的示例
task :testing do |task_name|
puts task_name
end
如果您通过
rake task
或bundle exec rake task
运行任务,您可以通过以下方式在初始值设定项中检查它:
if $0.end_with?('rake')
# rake stuff
else
# non-rake stuff
end
如果您愿意,可以使用
$PROGRAM\u NAME
而不是$0
。这个问题已经问了好几个地方,我认为任何答案都不是很好I我认为答案是检查Rake.application.top_level_tasks
,这是将运行的任务列表。Rake不一定只运行一个任务。“支持ActiveModel缓存的gem之一”-哪一个?是的,关于获取名称的问题和所选答案显示了如何检测您是否在执行Rake任务。这是正确的答案。我认为这比添加do | task name |
更优雅。如果您有命名空间任务,这应该可以put task|u name.name.split(“:”).last
(在rake v10.4.2中)。没有按照问题的要求显示如何在“Rails模型”中获取任务名称。