除错spork和redis-rb:在重启之前,尝试在子进程中使用连接时出现了错误。你需要在fork后重新连接到Redis

请问有什么问题?

当将redis-rb gems从2.2升级到3.0.1时,使用sporkt运行spec会出现以下错误。

在未重新连接的情况下,试图使用子进程的连接。在分叉之后,你需要重新连接到 Redis。

Causes

在redis-rb 3及之后的版本中,据说在进行fork操作时,父进程和子进程之间共享 redis 连接会抛出异常。

参考链接:https://github.com/redis/redis-rb/blob/master/lib/redis/client.rb#L277

处理

在Spork.each_run内写入以下代码,以便在spork进行fork时重新建立连接。

Spork.each_run do
  # This code will be run each time you run your specs.
  load Rails.root.join('config/initializers/redis.rb')
end
$redis = Redis.new(:host => 'localhost', :port => 6379)
$redis.ping

$redis.ping是在检查Redis连接后启动Rails服务器的黑客技巧。

独角兽也一样,

    • before_forkで$redis.quit

after_forkでRedisコネクションを作成

需要进行这样的处理。

广告
将在 10 秒后关闭
bannerAds