Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Rails のサポート
      • Bundler の使用
    • Python
      • Python でのバックグランドジョブ
      • Django の使用
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Java の高度なトピック
      • Spring Boot の使用
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • 継続的デリバリー
  • Preboot

Preboot

日本語 — Switch to English

最終更新日 2022年11月17日(木)

Table of Contents

  • Preboot の有効化と無効化
  • Preboot でのデプロイ
  • 手動または自動による dyno の再起動での Preboot
  • 注意

Preboot では、Web dyno での Standard dyno の起動動作​が変更されます。Preboot は、既存の一連の Web dyno を停止してから新しい Web dyno を起動するのではなく、既存の Web dyno が終了される前に新しい Web dyno が確実に起動される (かつトラフィックを受信する) ようにします。これは、ダウンタイムなしのデプロイに貢献できます。

Preboot は、Common Runtime の Professional dyno タイプ (Standard および Performance) を使用しているアプリに対してのみ使用できます。eco​ または basic​ dyno を使用しているアプリケーションは Preboot にアクセスできません。 Private Spaces 上のアプリケーションは、繰り返しのデプロイ​を使用できます。

この機能は、コードベースの 2 つのバージョンが並行して実行されている状況を引き起こす可能性があるため、慎重に使用する必要があります。たとえば、Web dyno が古いリリースを実行している一方で、ワーカーが新しいリリースを実行している可能性があります。コードとデータベースの設定がこの動作をサポートしていることを確認してください。

Preboot の有効化と無効化

Preboot は、アプリごとに明示的に有効にする必要があります。Preboot を有効にするには、次のようにします。

$ heroku features:enable preboot -a <myapp>
Enabling preboot for myapp... done

Preboot を無効にするには、次のようにします。

$ heroku features:disable preboot -a <myapp>
Disabling preboot for myapp... done

アプリケーションで Preboot を有効または無効にしても、再起動はトリガーされません。

Preboot が有効になっているかどうかを確認するには、次のようにします。

$ heroku features -a <myapp>
=== App Features (myapp)
[+] preboot  Provide seamless web dyno deploys [general]

Preboot でのデプロイ

Preboot が有効になったら、通常どおりに (コードをデプロイするか、または環境設定を変更することによって) 新しいリリース​を作成できますが、次のような異なる動作が確認されます。

  • ログには、slug のコンパイルが完了するとすぐに新しい dyno が起動したことが示されます。heroku ps​ の出力には、新しい dyno の状態 (starting​ や up​ など) が即座に表示されます。古い dyno は引き続き実行されますが、heroku ps​ には表示されません。
  • デプロイが完了してから約 3 分後 (または、デフォルト値が 1 分であるアプリの起動タイムアウト制限の 2 分後) に、HTTP リクエストが新しい dyno へのルーティングを開始し、同時に古い dyno へのルーティングを停止します。
  • 新しい dyno が完全に稼働し、ユーザーリクエストを処理した直後に、古い dyno がシャットダウンされます。これらのシャットダウンは、通常どおりにログで確認できます。

この動作の変更は、web​ プロセスタイプにのみ適用されます。その他の dyno (Worker など) は引き続き、通常どおりにシャットダウンおよび再起動されます。

ダウンタイムが必要なデータベーススキーマの変更を行う場合は、Preboot 機能を無効にし、変更とコードのプッシュを通常どおりに実行した後、Preboot を再び有効にすることをお勧めします。

手動または自動による dyno の再起動での Preboot

Preboot の動作は、リリースによって発生した再起動と、dyno の手動または自動による再起動​とでは若干異なります。dyno が手動または自動で再起動されると、次の動作が確認されます。

  • ログには、slug のコンパイルが完了するとすぐに新しい dyno が起動したことが示されます。heroku ps​ の出力には、新しい dyno の状態 (starting​ や up​ など) が即座に表示されます。古い dyno は引き続き実行されますが、heroku ps​ には表示されません。
  • 新しい dyno は、割り当てられたポートにバインドするとすぐにリクエストの受信を開始します。この時点では、古い dyno と新しい dyno の両方がリクエストを受信しています。
  • 再起動が実行されてから約 4 ~ 6 分後に、古い dyno がシャットダウンされます。これらのシャットダウンは、通常どおりにログで確認できます。

注意

  • だれがデプロイを実行していたとしても、新しいコードがユーザーリクエストの処理を開始するまでに数分待つ必要があります。これは Preboot を使用しない場合より長時間かかります (ただし、その間、ユーザーリクエストは引き続き古い dyno によって処理される)。
  • heroku ps​ で新しい dyno のステータスが表示されるまでに短時間 (1 ~ 2 分) かかりますが、ユーザーリクエストは引き続き古い dyno によって処理されています。
  • 不適切な状態の dyno がある場合は、heroku restart​ によって新しい dyno が起動されますが、再起動の送信を3 分以上停止するまで古い dyno は強制終了されません。heroku ps:stop​ により、この問題を即座に解決できます。
  • Preboot でリリースを作成すると、同時に実行される (最大 3 分間重複する) コードのバージョンが 2 つ存在することになりますが、ユーザーリクエストを処理するのは 1 つのバージョンだけです。これらが正常にやり取りできるように注意する必要があります。一部のアドオンやその他のサービスでは同時接続の数が制限されているため、2 倍の数の dyno を実行すると、このような制限に達する可能性が高くなります。特に、Heroku Postgres の場合、推奨される回避法は​接続プール​の使用です。
  • Preboot でリリースを作成すると、Heroku により、ルーティングが古い dyno から新しい dyno にある時点で切り替えられます。切り替え中に、リクエストが両方の dyno に転送される非常に短時間のオーバーラップが発生する可能性があります。
  • Preboot で dyno の手動または自動による再起動を行うと、新しい dyno は、割り当てられたポートにバインドするとすぐにリクエストの受信を開始するため、完全に準備ができる前にリクエストの処理を開始する可能性があります。これはまた、dyno をスケーリングしたり、dyno タイプを切り替えたりする場合にも当てはまります。
  • リリース中に、スケーリングやその他の Dyno formation の変更は許可されません。Preboot が完了するまで待機する必要があります。
  • Mini Heroku Data for Redis プランのアプリケーションで Preboot を使用することはお勧めしません。Premium プランにはより安定したアドレスがあるほか、メンテナンスやフェイルオーバーのためにホストを切り替えるときのダウンタイムを最小限に抑えるリダイレクト機能が含まれています。

関連カテゴリー

  • 継続的デリバリー
アプリの複数の環境の管理 レビューアプリ (旧)

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences