2

私は heroku にデプロイされた sinatra アプリを持っており、web を 3 つの dyno にスケーリングしたので、リクエストは web.1 web.2 と web.3 によってそれぞれ処理されます。現在のリクエストがどのdynoによって処理されているかをコントローラーアクション内からルビーで知りたいので、これをデータベースに保持したいと思います。私は少しグーグルをしましたが、満足のいく答えは見つかりませんでした。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

0

起動時にワーカー プロセスでこれを行うには、おそらく非常にハックな方法があります。

  1. からの出力を監視できる必要があります。例については、 https://github.com/dblock/heroku-commanderheroku logs --tailを参照してください。ワーカーはログを読み取ります。
  2. ワーカーはアプリに対して HTTP リクエストを行います。app/dyno?id=uuid1 を取得します。応答は、応答した dyno の MAC アドレスです。mac1.
  3. ワーカーはログで、uuid1 が web.5 に移動し、web.5 がその mac で応答したことを確認できます。ビンゴ、労働者は今知っています。
  4. PUT app/dyno?mac1=web.5&mac2=web.6 など。これを受信した各 dyno は、自分の mac をいずれかの mac と比較し、自分が誰であるかを知っていることを true/false で応答します。
  5. ワーカーがすべての dyno に到達し、すべての dyno が認識するまで繰り返します。
  6. dyno の再起動を定期的に監視します。

なぜ自分が「web.1」であることを知る必要があるのか​​疑問に思う必要があります。マシンの MAC アドレスのような一意の UUID にできないのはなぜですか?

于 2013-02-21T06:09:38.933 に答える
0

これを知る方法は本当にありません。どの Dyno がリクエストを処理しているかを指定する HTTP ヘッダーを Heroku から取得しないため、特定する方法がありません。あなたができる最善の方法は、Heroku にすべてのログをどこかにストリーミングさせ ( syslog ドレイン)、ログファイルを解析して要求 URI を Dyno に一致させることです。

于 2012-08-15T20:14:43.303 に答える