dyno の起動動作
最終更新日 2024年12月03日(火)
Table of Contents
dyno のライフサイクルにはさまざまな部分があります。この記事では、dyno の起動動作について説明します。
.profile ファイルコマンド
起動中、dyno コマンドの実行前に、コンテナによって bash
シェルを開始して $HOME/.profile
にあるすべてのコードを実行します。このファイルに bash
コードを入力して、アプリ内のあらゆる dyno のランタイムの初期環境を制御します。
.profile
スクリプトはアプリの環境設定の後に調達されます。環境設定が優先されるようにするには、LANG
と同様のテクニックを使用します。
# add vendor binaries to the path
export PATH=$PATH:$HOME/vendor/bin
# set a default LANG if it doesn’t exist in the environment
export LANG=${LANG:-en_US.UTF-8}
ほぼすべての目的について、環境設定は .profile
よりも便利で柔軟性があります。環境設定を編集するためにコードをプッシュする必要はありませんが、.profile
ファイルは編集する必要があります。
ローカル環境変数
dyno Manager により、アプリケーション内でアクセスできる多数のデフォルト環境変数が設定されます。
Cedar 世代のアプリ
- dyno が Web dyno の場合は、$PORT 変数を設定します。dyno が受信リクエストを受け取るには、このポート番号にバインドする必要があります。
$DYNO
変数は dyno ID に設定されます。たとえば、web.1
、worker.2
、run.9157
のようになります。$DYNO
変数の値はアプリ内で必ずしも一意ではありません。たとえば、デプロイ中または再起動中に、2 つの実行中の dyno が同じ dyno 識別子を持つ場合があります。通常の操作中に、値は最終的に一定になります。
Fir 世代のアプリ
- dyno 識別子の
$DYNO
変数は連番ではなく、代わりに自動生成された一意の英数字文字列が含まれます。たとえば、web-12a34b56d-e78f9
、worker-23z34x56y-w78k9
のようになります。 - dyno が Web dyno の場合、プロセスは指定された
$POST
([::]:$PORT
) の IPv6 アドレスにバインドする必要があります。
プロセス
.profile スクリプトが実行された後、dyno によって、dyno のプロセスタイプに関連付けられているコマンドが実行されます。たとえば、dyno が Web dyno の場合は、web
プロセスタイプに関連付けられている Procfile のコマンドが実行されます。
実行されるコマンドにより、追加のプロセスが発生する可能性があります。
Heroku は機能していないプロセスの蓄積を防ぐために、定期的に孤立プロセスを削除します。
同時に 1 つの dyno 内に存在できるプロセス/スレッドの最大数は、dyno サイズに応じて異なります。
Web dyno のポートバインディング
Web dyno 起動後 60 秒以内に、Cedar 世代のアプリケーションでは割り当てられた $PORT
、Fir 世代のアプリケーションでは [::]:$PORT
にバインドする必要があります。そうでない場合、Dyno Manager は Web dyno を終了し、R10 Boot Timeout が発生します。プロセスは、ポートにバインドする前とバインドした後、他のポートにバインドできます。
アプリケーションの起動にさらに多くの時間が必要な場合、一時的な解決策としてブートタイムアウトツールを使用して上限を増やします。一般的に、起動時間が長いとアプリケーションのデプロイや dyno の失敗からの回復が難しくなります。