部署 Heroku 重启 resque 和 clockwork 的问题

yuexiahandao · 2015年04月22日 · 最后由 yuexiahandao 回复于 2015年04月23日 · 2186 次阅读

亲们,最近遇到一个问题。项目是部署在 heroku 上的。server 使用 unicorn, 另外还有 resque 和 clockwork 两个 worker 进程。所以 procfile 的内容如下:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake resque:work QUEUE=*
clock:  bundle exec clockwork clock.rb

部署到项目之后,就发现这 3 个进程,最近几乎一天就会被重启一次。我想知道这是为什么?我们没有做什么操作。

下面的图片中显示有 119 个 resque worker 但其实是只有一个。

这三个进程都需要使用 Redis 进行相互之间的通信。最近发现 Redis 有时会连不上而报错,这会是 clockwork, resque 和 unicorn 重启的原因的吗?我想这两个 gem 包应该考虑到这个问题的吧!

clockwork 不能倒,因为里面有抓实时数据的线程,resque 其实也不能倒,clockwork 中的一些任务需要 resque 来做。resque 其实倒了立即启动也没事,但是经常发现 resque 倒了再启动,有些 clockwork 的任务它没有及时做!好像 resque 重新启动有一小时的时间差!

顺便说一句我的机器上,这些代码都是工作相当正常的。

本人是刚毕业,然后进公司自学 ruby,没有人指导,自己还要负责一个项目,遇到问题大都自己独立解决,不过这个关于 heroku 的问题实在是很难解决!请各位高手帮忙看看,感激不尽!

可能是连接 redis 时抛了一个 Timeout 的异常,导致 resque 退出,然后 foreman 重启。可是这 3 个服务不是在同一个时间重启的,比较郁闷!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号