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

use*_*694 6 rake ruby-on-rails activemodel

我有一个支持ActiveModel缓存的gem有问题.当我使用观察者缓存模型时,在应用程序初始化期间,它会尝试描述表以获取所有字段名称.

rake任务运行时也会执行相同的操作,包括db:migration.在这种情况下,存在一些循环引用错误.我想检测当前的rake任务,跳过gem初始化,但我不知道如何找出通过rake任务调用的代码.怎么检查?

zsq*_*are 13

我没有得到你想要做的,但这里是获取任务名称的一个例子.

  task :testing do |task_name|
    puts task_name
  end
Run Code Online (Sandbox Code Playgroud)


col*_*nta 9

这个问题已被问到一些地方,我认为任何答案都不是很好...... 认为答案是检查Rake.application.top_level_tasks,这是一个将要运行的任务列表.Rake并不一定只运行一项任务.

  • 是的,关于获取名称和所选答案的问题显示了如何检测您是否正在执行任务。这是正确的答案。 (2认同)

jdo*_*doe 1

如果您通过以下方式运行任务,rake task或者bundle exec rake task您可以通过以下方式在初始化程序中检查它:

if $0.end_with?('rake')
  # rake stuff
else
  # non-rake stuff
end
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用$PROGRAM_NAME代替$0