我在 heroku 部署了一个 sinatra 应用程序,并且我已经将 web 工作扩展到 3 个 dyno,因此 web.1 web.2 和 web.3 分别为请求提供服务。我想在 ruby 中从控制器操作中知道当前请求由哪个测功机提供服务,然后想将其保存在数据库中。我做了一些谷歌,但没有找到任何令人满意的答案。
任何帮助将不胜感激。
谢谢
使用工作进程在启动时执行此操作可能有一种非常hacky的方法。
heroku logs --tail
,请参阅https://github.com/dblock/heroku-commander以获取示例。工人阅读日志。你必须想知道为什么你需要知道你是“web.1”。为什么不能是唯一的 UUID,比如机器的 MAC 地址?
这真的没有办法知道。您没有从 Heroku 获得任何 HTTP 标头来指定哪个 Dyno 正在处理请求,因此无法判断。您能做的最好的事情就是让 Heroku 在某处流式传输您的所有日志(syslog drain),以便您可以解析日志文件并将请求 URI 匹配到 Dynos。