【问题标题】:Using delayed_job to queue a method from a gem in a Rails application在 Rails 应用程序中,使用delayed_job 对gem 中的方法进行排队
【发布时间】:2011-02-28 01:38:55
【问题描述】:

我想使用delayed_job 对方法upload_to_scribd(来自gem scribd_fu)进行排队。

有什么方法可以在不修改 gem 本身的情况下做到这一点?

【问题讨论】:

    标签: ruby-on-rails delayed-job


    【解决方案1】:

    您不需要做任何特别的事情来让它工作。例如,您可以这样做:

    ScribdFu.new.delay.upload_to_scribd
    

    如果您愿意,您也可以将其包装在您自己的函数或模型中:

    class Attachment
      def upload
        ScribdFu.new(self).upload_to_scribd
      end
    end
    
    Attachment.first.delay.upload
    

    P.S:我不知道我对 ScribdFu gem 的调用语法是否正确,但是您应该能够以这种方式使用延迟方法来排队延迟的作业。

    要完成您在评论中想要的内容,请创建一个名为 (config/initializers/delay_scribd.rb) 的文件并将以下内容添加到其中:

    module ScribdFu
      module InstanceMethod
        handle_asynchronously :upload_to_scribd
      end
    end
    

    这意味着在任何时候调用此函数时,都会在延迟作业中调用它,而无需显式调用该方法的延迟。 结束

    【讨论】:

    • 感谢您的回答。我希望对upload_to_scribd 的每次调用都由delayed_job 处理,而不是进行显式调用。这样做的原因是 gem 添加了一个调用 :upload_to_scribd 的 after_save 方法,我特别想延迟这一点。我可以简单地明确设置 after_save :upload 并结合您的答案中的方法吗?这会覆盖 ScribdFu 的默认 after_save 吗?如果没有,我该如何覆盖它?如果它没有被覆盖,upload_to_scribd 将被调用两次——一次由 gem 调用,一次通过显式上传方法。
    • 我用修改默认行为的解决方案更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2011-08-14
    • 2014-10-30
    • 2012-10-29
    • 2017-11-09
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多