【问题标题】:How to get name of current rake task in my Rails model?如何在我的 Rails 模型中获取当前 rake 任务的名称?
【发布时间】:2012-06-04 13:11:16
【问题描述】:

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

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

【问题讨论】:

  • “支持 ActiveModel 缓存的 gem 之一”- 哪一个?

标签: ruby-on-rails rake activemodel


【解决方案1】:

这个问题问了好几个地方了,我觉得没有一个答案很好……觉得答案是查Rake.application.top_level_tasks,这是一个列表将运行的任务。 Rake 不一定只运行 一个 任务。

【讨论】:

  • 是的,关于获取名称的问题和选定的答案显示了如何检测您是否处于 rake 任务中。这是正确的答案。
  • 我觉得这比加do |task name|更优雅。
【解决方案2】:

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

if $0.end_with?('rake')
  # rake stuff
else
  # non-rake stuff
end

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

【讨论】:

    【解决方案3】:

    我不完全了解您想要做什么,但这里有一个获取任务名称的示例。

      task :testing do |task_name|
        puts task_name
      end
    

    【讨论】:

    • 如果你有命名空间任务,这应该可以工作puts task_name.name.split(':').last(在 rake v10.4.2 中)。
    • 没有显示如何在“Rails 模型”中获取任务名称,如问题所示。
    猜你喜欢
    • 2020-09-07
    • 2012-03-19
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多