代码之家  ›  专栏  ›  技术社区  ›  user3574603

Rails/Sidekiq:帮助我理解这个例子中的“initializers/Sidekiq.rb”的重复`

  •  0
  • user3574603  · 技术社区  · 6 年前

    我第一次在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 sidekiq_app_name_ 其次是目前的环境。我假设前缀可以是我选择的任何字符串——很可能是我的应用程序的应用程序。

    我不明白的是,为什么这句话重复了?

    完全一样。当然 Rails.env

    1 回复  |  直到 6 年前
        1
  •  2
  •   mwp    6 年前

    这里有一个壁橱 服务器 图书馆和酒吧 库,并且它们是独立配置的。服务器负责从队列中弹出作业并执行它们。客户机负责向队列中添加作业。例如,呼叫 MyWorker.perform_in(5.minutes) 使用客户端库,而不是服务器库。

    Sidekiq不假设您的客户机和服务器在同一个主机上,甚至在同一个代码库中。您可能希望Sidekiq作业在一台主机(或一组主机)上执行,Redis在本地运行,而Rails应用程序在另一台主机(或一组主机)上运行。在这种情况下,您将在服务器配置中使用localhost地址,在客户端配置中使用远程地址。如果您的代码库是独立的,那么服务器代码库中可能没有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}"