我是第一次在Rails应用中使用Sidekiq。这也是我第一次使用Redis。
我看过几个示例(Here,here,here),其中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
每次都会返回相同的内容吗?是错字还是重复有效果?如果是这样,重复的目的是什么?
答案 0 :(得分:2)
有一个Sidekiq 服务器库和一个Sidekiq 客户端库,它们是独立配置的。服务器负责将作业弹出队列并执行。客户端负责将作业添加到队列。例如,调用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_PROVIDER
或REDIS_URL
并完全跳过Ruby中的配置步骤!
export REDIS_URL="redis://localhost:6379/0/sidekiq_app_name_${APP_ENV}"