在sidekiq容器中设置redis配置选项

在sidekiq容器中设置redis配置选项,redis,sidekiq,Redis,Sidekiq,我刚刚在我最新的docker容器上运行了一个docker compose构建,我注意到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.exist

我刚刚在我最新的docker容器上运行了一个
docker compose构建
,我注意到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
sidekiq|u 1 | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx信息:引导Rails 5.2.4在开发环境中的应用
sidekiq|u 1 | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx信息:在ruby 2.5.8p224中运行(2020-03-31修订版67882)[x86_64-linux]
sidekiq|u 1 | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx信息:有关许可证的详细信息,请参阅许可证和LGPL-3.0。
sidekiq|u 1 | 2020-06-17T02:42:21.743Z pid=1 tid=gshym9ynx信息:升级到sidekiq Pro以获得更多功能和支持:https://sidekiq.org
sidekiq_1 | true:TrueClass的未定义方法“info”
sidekiq|u 1 |/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:118:in'block in redis|u info'
sidekiq|u 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层)in with”
sidekiq|u 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|u 1 |/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:94:in'redis'
sidekiq|u 1 |/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq.rb:112:in'redis|u info'
sidekiq|u 1 |/usr/local/bundle/gems/sidekiq-6.0.7/lib/sidekiq/cli.rb:61:in'run'
sidekiq|u 1 |/usr/local/bundle/gems/sidekiq-6.0.7/bin/sidekiq:31:in`'
sidekiq|u 1 |/usr/local/bundle/bin/sidekiq:23:in'load'
sidekiq|u 1 |/usr/local/bundle/bin/sidekiq:23:in`'
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|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/command.rb:27:in'run'
sidekiq|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/invocation.rb:126:in'invoke_命令'
sidekiq|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor.rb:387:in'dispatch'
sidekiq|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:27:in'dispatch'
sidekiq|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/base.rb:466:in'start'
sidekiq|u 1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:18:in'start'
sidekiq|u 1 |/usr/local/bin/bundle:30:in'block in'
sidekiq_1 |/usr/local/lib/ruby/site_ruby/2.5.0/bundler/friendly_errors.rb:124:in'with_friendly_errors'
sidekiq|u 1 |/usr/local/bin/bundle:22:in`'
test_sidekiq_1已退出,代码为1

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

你可以在这里看到:

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

我目前在我的GEM文件中有此消息,以避免收到此消息的垃圾邮件

gem 'redis', '4.1.4'

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

只需添加一个初始化文件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
if Gem::Version.new(Sidekiq::Version)

信用证:

我不建议这样做。更改库向另一个不知道如何处理的库返回值的方式可能会产生意外的后果。