想知道某个请求是由heroku的哪个dyno提供的

时间:2012-05-17 14:09:38

标签: ruby heroku

我在heroku部署了一个sinatra应用程序,并且我已经将网络缩放到3个dynos,因此请求由 web.1 web.2和 web.3 respoectively。 我想在ruby中知道,从一个控制器动作中,当前请求由哪个dyno提供,然后想要将其保存在数据库中。我做了一些谷歌,但没有找到任何满意的答案。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

真的没有办法知道这一点。您没有从Heroku获得任何指定哪个Dyno正在处理请求的HTTP头,因此无法分辨。您可以做的最好的事情是让Heroku将所有日志传输到某处(syslog drain),以便您可以解析日志文件并将请求URI与Dynos匹配。

答案 1 :(得分:0)

使用工作进程启动时可能有一种非常黑客的方法。

  1. 您需要能够监控heroku logs --tail的输出,有关示例,请参阅https://github.com/dblock/heroku-commander。工人读取日志。
  2. 工作人员向应用程序发出HTTP请求,例如。获取app / dyno?id = uuid1。响应是响应的dyno的MAC地址,例如。 MAC1。
  3. 工作人员可以在日志中看到uuid1转到web.5,后者用mac响应。 Bingo,工人现在知道了。
  4. PUT app / dyno?mac1 = web.5&amp; mac2 = web.6等。每个接收到它的dyno都会将其mac与其中一个mac进行比较并回复true / false,它现在知道它是谁。< / LI>
  5. 重复,直到工人到达所有dynos并且所有dynos都知道。
  6. 关注dyno定期重启。
  7. 你不得不怀疑为什么你需要知道你是“web.1”。为什么它不能是唯一的UUID,比如机器的MAC地址?