我有一个Rails应用程序,它使用Sidekiq进行异步作业。我设置了并行测试来加速我的测试管道。这很好,但我有一个大问题:Redis遇到了Sidekiq作业的瓶颈,这些作业试图在那里排队。
我一直看到这些错误:
Redis::CannotConnectError:
Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
我正在运行一些旧版本的宝石,也使用Sidekiq debounce(不确定这是否是原因)sidekiq (5.2.1)
sidekiq-debounce (1.1.0)
rspec-sidekiq (3.0.3)
我的印象是,rspec-sidekiq可以通过使用以下两种方法之一来存根对Redis的调用:Sidekiq::Testing.inline!
或Sidekiq::Testing.fake!
来分别内联运行作业或将它们推送到数组。然而,这两种选择都不起作用。我错过了什么?
我尝试设置测试环境来伪造或内联作业,如:
require "sidekiq/testing"
Sidekiq::Testing.inline!
或
require "sidekiq/testing"
Sidekiq::Testing.fake!
然后我甚至检查了一些测试,以确保这是由以下命令设置的:
puts "SIDEKIQ MODE ENABLED: #{Sidekiq::Testing.enabled?}"
puts "SIDEKIQ MODE FAKE: #{Sidekiq::Testing.fake?}"
puts "SIDEKIQ MODE INLINE: #{Sidekiq::Testing.inline?}"
puts "SIDEKIQ MODE DISABLED: #{Sidekiq::Testing.disabled?}"
它返回了我所期望的,但我仍然得到了Redis连接拒绝。
我还尝试将各个部分 Package 在块中,如:
Sidekiq::Testing.fake! do
# some code
end
1条答案
按热度按时间lrl1mhuk1#
所以我想我知道哪里出了问题或者该改什么了。我们将Sidekiq与Sidekiq-debounce沿着使用,我认为这实际上是拦截了基本的Sidekiq异步调用,因此即使我将它们设置为
Sidekiq::Testing.fake!
或Sidekiq::Testing.inline!
,这也不会影响使用SomeWorker.perform_in()
调用的作业我在我们的
sidekiq.rb
初始化器中结束了对测试环境的去抖动中间件的禁用:再次运行管道,不再看到Redis连接问题。