【问题标题】:Spork rspec while using redis, raise Redis::InheritedErrorSpork rspec 在使用 redis 时,引发 Redis::InheritedError
【发布时间】:2013-04-12 06:41:35
【问题描述】:

如果代码执行redis相关函数,会引发

Redis::InheritedError: 试图使用来自子进程的连接而不重新连接。分叉后需要重新连接Redis。

当 redis 连接时,它将 spork process.pid 保存为@pid,然后 redis 执行它将使用ensure_connected 检查连接,这将通过Process.pid != @pid 进行检查。而且这两个pid不同,所以会引发Redis::InheritedError。

谷歌,

Resque.after_fork do 
  Resque.redis.client.reconnect
end

并根据规范重新连接redis客户端

这两个都不适合我。

【问题讨论】:

    标签: rspec redis spork


    【解决方案1】:

    我在这里找到了解决方案,它对我有用:Hacki.ly

    看起来需要在您的 spec_helper.rb 中添加以下内容:

    RSpec.configure do |config| 
      # ... 
      config.before :all do
        $redis.client.reconnect 
      end 
      # ... 
    end
    

    您可能需要将 $redis 更改为您用来获取 Redis 实例引用的任何内容。

    【讨论】:

    • 你仍然得到Redis::InheritedError
    【解决方案2】:

    redis升级到2.6.12后,问题解决了。

    【讨论】:

      【解决方案3】:

      我可以通过将以下内容添加到 spec_helper.rb 来解决此问题:

      Spork.each_run do
        $redis.client.reconnect
      end
      

      正如 Gabe 的回答中提到的,您可能需要将 $redis 更改为您用来获取对 Redis 实例的引用的任何内容。

      【讨论】:

        猜你喜欢
        • 2014-08-13
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 2018-05-29
        • 2018-10-11
        • 1970-01-01
        相关资源
        最近更新 更多