Ruby on rails 如何在Rails模型中获取当前rake任务的名称?

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_

我对其中一个支持ActiveModel缓存的gem有一些问题。当我使用observer for cached model时,在应用程序初始化期间,它会尝试描述表以获取所有字段的名称


在运行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模型”中获取任务名称。