【问题标题】:Is there a way to determine whether an ActiveJob is being performed on a Resque worker or within the application?有没有办法确定 ActiveJob 是在 Resque 工作人员上还是在应用程序内执行?
【发布时间】:2016-08-25 06:40:45
【问题描述】:

我的 Rails 应用中有一个从 ActiveJob::Base 扩展的 Job,它有两种调用方式:

  1. 每天 ResqueScheduler,由 Resque 工作人员提取并处理
  2. 在应用内通过#perform_now 调用,因此由应用处理。

我有没有办法在作业中确定它是否正在由 Resque 工作人员处理?

【问题讨论】:

    标签: ruby-on-rails resque rails-activejob resque-scheduler


    【解决方案1】:

    您应该会在服务器日志中看到对 ActiveJob 的引用。

    [ActiveJob] [<YOUR-JOB-CLASS>] [b8ed2ecb-10ce-433d-8ddb-33a04c8021cd]    Performing <YOUR-JOB-CLASS> from Resque(default)...
    

    这不是确定的,但它是您的代码正在执行的上下文的一个强有力的指标。

    【讨论】:

    • 我试图在代码执行期间弄清楚 - 如果作业在后台执行,我会记录某些信息,但如果调用 #perform_now 则不会。
    • 迄今为止我发现的最佳解决方案基本上是重写 perform_now 方法以将变量添加到参数中,但我希望有更好的方法。
    【解决方案2】:

    您可以使用defined?(Rails) 来确定您是在 Rails 应用程序中还是在 Resque 上下文中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多