我们在 EC2 中运行一个 redis 服务器,并保护从我们的生产应用程序机器到 redis 实例的已建立 ssh 隧道的连接。我们使用了类似的东西autossh -M 0 -f -NT -L6379:localhost:6379 -i /path/to/ec2.key root@ec2-xxxx.compute-1-amazonaws.com
来建立持久隧道。
现在问题来了,这似乎在大约 90% 的时间里都有效,但Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (ECONNREFUSED)
在从 environment.rb 初始化 Resque 时,无论出于何种原因,redis 偶尔会抛出异常。给定的盒子已经有来自其他进程(独角兽和 resque 线程)的大量 redis 连接,所以我知道隧道正在工作。如果我重新运行该命令,它几乎总是成功并且能够顺利建立连接。
我们在 m2-xlarge 上的 CentOS 6 上运行 Rails 4、Resque 1.24.1、Redis gem 3.0.5 和 redis-server 2.6.12。
有任何想法吗?如果在部署过程中发生这种情况,会非常令人沮丧,因为它会杀死 capistrano,它还会导致我们的夜间工作中出现零星的故障,从而启动他们自己的 rails 环境。