アプリを数秒間停止せずに、誰もがHerokuの本番サーバーに更新をプッシュする方法を知りたいですか?
Herokuへのプッシュ(特にUnicornなどを使用)は、Webアプリのロードに時間がかかります。特に、サイトにアクセスしようとしているエンドユーザーがいる場合。最終的には503ページになります。Unicornプロセスの読み込みには最大30秒から1分かかります。
アプリを数秒間停止せずに、誰もがHerokuの本番サーバーに更新をプッシュする方法を知りたいですか?
Herokuへのプッシュ(特にUnicornなどを使用)は、Webアプリのロードに時間がかかります。特に、サイトにアクセスしようとしているエンドユーザーがいる場合。最終的には503ページになります。Unicornプロセスの読み込みには最大30秒から1分かかります。
これを達成するために必要なことが2つあり、それは簡単ではありません。
1)移行には下位互換性が必要です(つまり、アプリの稼働中に実行する必要があります)。これについては、次の記事を参照してください:http: //pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/
2)2つのherokuアプリを使用してデプロイします。このトピックについてHerokuでチケットを開きましたが、これが彼らの返信でした。
現在、ダウンタイムゼロのデプロイを提供するソリューションに取り組んでいますが、これがいつ利用可能になるかについてのETAはありません。
それまでの間、可能な回避策は2つの別々のアプリにデプロイすることです。新しいコードを2番目のアプリにプッシュし、スピンアップしてから、ドメイン名を2番目のアプリに移動できます。洗浄して、次の展開で繰り返します。これは理想的とは言えませんが、暫定的に望ましい結果が得られる可能性があります。
これを行う場合、それを台無しにする方法はたくさんあるので、可能な限り自動化する必要があります。そのトピックに関する記事は次のとおりです:http://casperfabricius.com/site/2009/09/20/manage-and-rollback-heroku-deployments-capistrano-style/
データベースの移行はコードの両方のバージョン(ライブバージョンとライブになる予定)で機能する必要があるため、これら2つのソリューションは両方とも実行する必要があります。それが機能するようになったら、アプリケーション自体がダウンしたように見えないという2番目の問題を解決できます。プッシュが開始されると、個々のダイノをスピンアップおよびスピンダウンするためのサポートされている方法はありません。
更新: Herokuで利用できるベータ機能があります。使用するには、プッシュする前に次の手順を実行します。
heroku labs:enable -a APP_NAME preboot
これにより、プッシュ中のアプリの動作が変更されます。2分間ウォームアップする並列インスタンスをプッシュアップします。プッシュからほぼ正確に2分後、すべてのトラフィックが新しいアプリにルーティングされます。上で述べたように、移行はまだ問題であるため、注意してください。