13

アプリケーション内から heroku dyno 名 (web.1、web.2 など) を特定する方法はありますか? 一意のリクエスト ID を生成できるようにしたいと考えています (たとえば、リクエスト スタック全体の統合ロギングのために Web とワーカー dyno 間のリクエストを追跡するため)。

これができない場合、フォールバックの推奨事項はありますか?

4

7 に答える 7

6

Heroku のサポートについてこの質問をしましたが、ここには私と同様の質問をした人が他にもいるので、共有する必要があると考えました。Heroku のスタッフ JD は次のように答えました。

いいえ、この情報を dyno 内から見ることはできません。以前にこの機能リクエストを確認しましたが、実装しないことを選択しました。これにより、スタック内で回避することを目指している Heroku 固有の変数が導入されるためです。そのため、この機能を実装する予定はありません。

同様の結果を得るために、dyno ブートで一意の識別子 (UUID など) を環境に生成または追加し、その時点でログに出力することで、これをアプリの dyno に関連付けることができます。後でそれを見つける必要がある場合は、その行のログを確認できます (もちろん、Papertrail、Loggly などを使用して、または独自のサーバーにログを排出する必要があります)。

残念ながら、私のシナリオでは、UUID は長すぎます (このような大きなデータが必要な場合は、最初に UUID を使用して追跡します)。しかし、公式の回答があることはまだ良いことです。

于 2012-08-14T00:10:07.870 に答える
3

これは質問に正確に答えないかもしれませんが、Procfile にワーカー プロセスごとに異なる行を含めることができます (それぞれに ps:scale を 1 を使用します)。その後、Procfile からワーカー番号を環境変数として渡すことができます。

サンプル procfile の 2 行は次のようになります。

worker_1: env WORKER_NUMBER=1 node worker
worker_2: env WORKER_NUMBER=2 node worker
于 2016-08-08T06:07:10.920 に答える
1

使用している foremanパッケージheroku localは、ENV 変数名を再度変更したようです (heroku/7.54.0)。$FOREMAN_WORKER_NAMEローカルで実行しているときにワーカー名を取得できるようになりました。$DYNOHeroku で実行する場合と同じ値を持ちます ( web.1web.2など)。

于 2021-06-03T14:26:01.533 に答える
0

foremangem はまだ を使用して$PSいるため、dyno 名にアクセスして heroku と開発中 ( を使用している場合) の両方で動作させるには、最初に をforemanチェックしてから をチェックします。ローカル コンソールのケースを処理するには、$PS$DYNORails.console

dyno_name = ENV['PS'] || ENV['DYNO'] || (defined?(Rails::Console) ? "console" : "")
于 2016-08-13T22:21:46.043 に答える