我对支持 ActiveModel 缓存的 gem 之一有一些问题。当我将观察者用于缓存模型时,在应用程序初始化期间,它会尝试描述表以获取所有字段名称。
当 rake 任务运行时也会做同样的事情,包括 db:migration。在这种情况下,会出现一些循环引用错误。我想检测当前的 rake 任务,跳过 gem 初始化,但我不知道如何找出是通过 rake 任务调用的代码。如何检查?
我对支持 ActiveModel 缓存的 gem 之一有一些问题。当我将观察者用于缓存模型时,在应用程序初始化期间,它会尝试描述表以获取所有字段名称。
当 rake 任务运行时也会做同样的事情,包括 db:migration。在这种情况下,会出现一些循环引用错误。我想检测当前的 rake 任务,跳过 gem 初始化,但我不知道如何找出是通过 rake 任务调用的代码。如何检查?
我不完全了解您要做什么,但这是获取任务名称的示例。
task :testing do |task_name|
puts task_name
end
这个问题问了几个地方,我觉得没有一个答案很好……我认为答案是 check Rake.application.top_level_tasks
,这是一个将要运行的任务列表。Rake 不一定只运行一项任务。
如果您通过以下方式运行任务,rake task
或者bundle exec rake task
您可以通过以下方式在初始化程序中检查它:
if $0.end_with?('rake')
# rake stuff
else
# non-rake stuff
end
如果你喜欢,你可以使用$PROGRAM_NAME
代替。$0