【问题标题】:Is there an equivalent of ApplicationController but for Active Job?除了 Active Job 之外,是否有 ApplicationController 的等价物?
【发布时间】:2016-04-14 23:50:22
【问题描述】:

我在我的 Rails 应用程序中使用 ActiveJob 并尝试添加一些应该由我的所有工作共享的通用功能(确切地说是异常处理)。

一个例子是 -

class MyAbstractJob < ActiveJob::Base
  rescue_from StandardError do |exception|
    # do exception handling stuff ...
  end
end

class FooJob < MyAbstractJob
  queue_as :my_queue

  def perform *args
    # do job stuff ...
  end      
end

这种模式类似于将ApplicationController 用于控制器,它继承自ActionController::Base,并提供了实现任何控制器子类上可用的共享设施的地方。

这实际上似乎在大多数情况下都有效,除非我尝试调用 queue_as :my_queue - 在这种情况下我最终会看到 -

NoMethodError: undefined method 'queue_as' for #&lt;Class:0x007f088905c970&gt;

我在 Rails 文档中没有看到对这种特定模式的引用。有谁知道这方面的好方法吗?

【问题讨论】:

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


    【解决方案1】:

    这很奇怪,我认为您的代码是正确的。我已经按原样测试了您的代码,没有更改任何内容,也没有发现任何问题:

    FooJob.perform_later
    # Performing FooJob from Inline(my_queue)
    # Performed FooJob from Inline(my_queue) in 3.81ms
    # Enqueued FooJob (Job ID: 6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33) to Inline(my_queue)
    # => #<FooJob:0x0000000464de90 @arguments=[], @job_id="6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33", @queue_name="my_queue">
    

    我已将这两个类放入app/jobs 目录。

    您在问题中显示的错误似乎与继承有关。你确定你的FooJob 类真的继承自MyAbstractJob 吗?也许您可能还需要重新加载 Rails 才能确定。

    如果您的问题仍然存在,请发布真实的课程代码,而不是简化的示例。

    【讨论】:

    • 谢谢!这是真的,它实际上工作得很好。错误在别处。
    猜你喜欢
    • 2019-02-19
    • 2018-07-04
    • 2021-03-29
    • 2011-01-16
    • 2020-09-20
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多