gpt4 book ai didi

ruby-on-rails - rails/Sidekiq : Help me understand the duplication in this example of `initializers/sidekiq.rb`

转载 作者:可可西里 更新时间:2023-11-01 11:12:30 26 4
gpt4 key购买 nike

我第一次在 Rails 应用程序中使用 Sidekiq。这也是我第一次使用Redis。

我见过几个示例(Hereherehere),其中 initializers/sidekiq.rb 包含以下几行:

Sidekiq.configure_server do |config|
config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end

Sidekiq.configure_client do |config|
config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end

我还没有找到任何文档来准确解释这里发生了什么。

我知道正在将哈希分配给 config.redis。哈希有一个指向 redis 服务器的 url,以及一个以 sidekiq_app_name_ 为前缀的命名空间,后跟当前环境。我假设前缀可以是我选择的任何字符串——很可能是我的应用程序的应用程序。

我不明白的是,为什么重复这行?

为什么会重复这行?

完全一样。 Rails.env 每次都返回相同的东西吗?是错字还是重复有影响?如果是这样,重复的意义何在?

最佳答案

有一个 Sidekiq server 库和一个 Sidekiq client 库,它们是独立配置的。服务器负责从队列中弹出作业并执行它们。客户端负责将作业添加到队列中。例如,调用 MyWorker.perform_in(5.minutes) 使用客户端库,而不是服务器库。

Sidekiq 不假设您的客户端和服务器位于同一主机上,甚至不在同一代码库中。您可能希望 Sidekiq 作业在一台主机(或一组主机)上执行,Redis 在本地运行,而您的 Rails 应用程序在另一台主机(或一组主机)上运行。在这种情况下,您将在服务器配置中使用本地主机地址,在客户端配置中使用远程地址。如果您的代码库是独立的,则服务器代码库中可能没有 Rails,因此您必须在没有 Rails.env 的情况下配置 Redis。

如果您计划在同一台主机上一起运行所有内容,则很容易对代码进行重复数据删除:

REDIS_CONFIG = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }

Sidekiq.configure_server {|config| config.redis = REDIS_CONFIG }
Sidekiq.configure_client {|config| config.redis = REDIS_CONFIG }

或者:

sidekiq_config = proc do |config|
config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end

Sidekiq.configure_server &sidekiq_config
Sidekiq.configure_client &sidekiq_config

或者您可以在父环境中设置 REDIS_PROVIDERREDIS_URL 并完全跳过 in-Ruby 配置步骤!

export REDIS_URL="redis://localhost:6379/0/sidekiq_app_name_${APP_ENV}"

关于ruby-on-rails - rails/Sidekiq : Help me understand the duplication in this example of `initializers/sidekiq.rb` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52599606/

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