gpt4 book ai didi

ruby-on-rails - 了解 Redis、Sidekiq、Heroku 和 Rails 5 的后台 worker

转载 作者:可可西里 更新时间:2023-11-01 11:14:46 29 4
gpt4 key购买 nike

我有一个 Rails 5 应用程序,我开始使用 Sidekiq、Heroku 和 Redis 将各种作业转移到后台。

到目前为止,我有 ResetFinanceDataWorker,它有一个同名的类。

//reset_finance_data_worker.rb

class ResetFinanceDataWorker
include Sidekiq::Worker
sidekiq_options retry: false

def perform()
end
end

我可以通过调用 ResetFinanceDataWorker.perform_in(10.seconds) 来调用它。理想情况下,我希望在一个文件中有多个工作人员,如下所示:

//finance_worker.rb

class AnotherWorker
include Sidekiq::Worker
sidekiq_options retry: false

def perform()
end
end

class ResetFinanceDataWorker
include Sidekiq::Worker
sidekiq_options retry: false

def perform()
end
end

并且能够调用 FinanceWorker.AnotherWorker.perform_in(10.seconds)。然而,这是不可能的。

谁能给我解释一下 1) 我将如何完成这项工作? 2) 组织工作人员文件的最佳实践。

谢谢。

最佳答案

最佳实践和约定是在一个文件中只放置一个类并具有相应的文件名。不管是 worker 还是任何其他类(Class)。如果你想组织它们,你可以将类似的 worker 包装在一个模块中,并将它们移动到一个单独的文件夹 finance_worker:

 module FinanceWorker  
class AnotherWorker
end
end

在这种情况下,您可以调用 FinanceWorker::AnotherWorker.perform_async

更新:

app/jobs 中创建一个单独的文件夹 finance_worker 并将所有需要的工作人员文件移到那里。将所有这些工作类包装在 module FinanceWorker 中。我的意思是,单独包装,仍然在不同的文件中,仍然是 只有一个类,包装在模块中,在文件中

如果您有 10 个 worker ,您就有 10 个文件。但它是 Sidekiq workers,不是 heroku workers,不要混淆。要启动 Sidekiq,您只需要 Procfile 中的一行:worker: bundle exec sidekiq。该行将为 Sidekiq 启动 1 个 heroku worker dyno,这将启动他的所有 10 个 worker。没关系,这是常见的做法。如果您注意到,Sidekiq 的 1 个 dyno 是不够的,您总是可以添加更多,它们会在彼此之间划分队列。

并且不要忘记您可以为工作人员指定队列名称。默认情况下,所有作业都进入一般 default 队列。如果您希望工作人员拥有自己的队列,只需添加到 sidekiq_options:

sidekiq_options retry: false, queue: 'finance'

关于ruby-on-rails - 了解 Redis、Sidekiq、Heroku 和 Rails 5 的后台 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097020/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com