【问题标题】:Setting redis configuration options in sidekiq container在 sidekiq 容器中设置 redis 配置选项
【发布时间】:2020-06-17 13:54:28
【问题描述】:

我刚刚在我最新的 docker 容器上运行了 docker-compose build,我注意到 sidekiq 现在正在重复生成这一行:

sidekiq_1   | `Redis#exists(key)` will return an Integer in redis-rb 4.3. `exists?` returns a boolean, you should use it instead. To opt-in to the new behavior now you can set Redis.exists_returns_integer =  true. To disable this message and keep the current (boolean) behaviour of 'exists' you can set `Redis.exists_returns_integer = false`, but this option will be removed in 5.0. (/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq/launcher.rb:160:in `block (2 levels) in ❤')

我在哪里设置这个设置?我试图创建一个初始化程序,但我确定我做错了:

# config/initializers/sidekiq.rb
redis_conn = proc {
  Redis.exists_returns_integer =  true
}

Sidekiq.configure_client do |config|
  config.redis = ConnectionPool.new(size: 5, &redis_conn)
end

Sidekiq.configure_server do |config|
  config.redis = ConnectionPool.new(size: 25, &redis_conn)
end

尝试使用上述初始化程序中的代码时,容器失败并出现此错误:

sidekiq_1   | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx INFO: Booted Rails 5.2.4 application in development environment
sidekiq_1   | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx INFO: Running in ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux]
sidekiq_1   | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx INFO: See LICENSE and the LGPL-3.0 for licensing details.
sidekiq_1   | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx INFO: Upgrade to Sidekiq Pro for more features and support: https://sidekiq.org
sidekiq_1   | undefined method `info' for true:TrueClass
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:118:in `block in redis_info'
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:97:in `block in redis'
sidekiq_1   | /usr/local/bundle/gems/connection_pool-2.2.3/lib/connection_pool.rb:63:in `block (2 levels) in with'
sidekiq_1   | /usr/local/bundle/gems/connection_pool-2.2.3/lib/connection_pool.rb:62:in `handle_interrupt'
sidekiq_1   | /usr/local/bundle/gems/connection_pool-2.2.3/lib/connection_pool.rb:62:in `block in with'
sidekiq_1   | /usr/local/bundle/gems/connection_pool-2.2.3/lib/connection_pool.rb:59:in `handle_interrupt'
sidekiq_1   | /usr/local/bundle/gems/connection_pool-2.2.3/lib/connection_pool.rb:59:in `with'
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:94:in `redis'
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:112:in `redis_info'
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq/cli.rb:61:in `run'
sidekiq_1   | /usr/local/bundle/gems/sidekiq-6.0.7/bin/sidekiq:31:in `<top (required)>'
sidekiq_1   | /usr/local/bundle/bin/sidekiq:23:in `load'
sidekiq_1   | /usr/local/bundle/bin/sidekiq:23:in `<top (required)>'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:74:in `load'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:74:in `kernel_load'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:28:in `run'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:463:in `exec'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:27:in `dispatch'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:18:in `start'
sidekiq_1   | /usr/local/bin/bundle:30:in `block in <main>'
sidekiq_1   | /usr/local/lib/ruby/site_ruby/2.5.0/bundler/friendly_errors.rb:124:in `with_friendly_errors'
sidekiq_1   | /usr/local/bin/bundle:22:in `<main>'
test_sidekiq_1 exited with code 1

【问题讨论】:

    标签: redis sidekiq


    【解决方案1】:

    sidekiq github上有一个issue与此问题相关。

    你可以在这里看到它:https://github.com/mperham/sidekiq/issues/4591

    基本上,redis gem 做出了改变,在未来使用某种方法时会导致不同的行为。在 Sidekiq 6.1 发布之前,除了暂时降级您正在使用的 redis gem 版本之外,您无法阻止此消息。

    我目前在我的 Gemfile 中有这个,以避免收到垃圾邮件。

    gem 'redis', '4.1.4'
    

    问题不在于您在做什么,而在于您正在使用的库。

    【讨论】:

      【解决方案2】:

      只需添加一个初始化文件 redis.rb 即可消除警告。

      if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new('6.1')
        Redis.exists_returns_integer = true
      else
        raise 'Time to remove Redis.exists_returns_integer: https://github.com/mperham/sidekiq/issues/4591'
      end
      

      学分:https://github.com/DFE-Digital/apply-for-postgraduate-teacher-training/pull/2275/files/16d2ad7ae053247760cf3905cdbacfdf4ec4b7ea

      【讨论】:

      • 我不建议这样做。更改一个库将值返回给另一个不知道如何处理它的库的方式可能会产生意想不到的后果。
      猜你喜欢
      • 2015-07-15
      • 2013-01-22
      • 2020-01-05
      • 1970-01-01
      • 2014-11-16
      • 2016-01-19
      • 1970-01-01
      • 2021-09-07
      • 2017-06-24
      相关资源
      最近更新 更多