6

アプリを数秒間停止せずに、誰もがHerokuの本番サーバーに更新をプッシュする方法を知りたいですか?

Herokuへのプッシュ(特にUnicornなどを使用)は、Webアプリのロードに時間がかかります。特に、サイトにアクセスしようとしているエンドユーザーがいる場合。最終的には503ページになります。Unicornプロセスの読み込みには最大30秒から1分かかります。

4

2 に答える 2

6

これを達成するために必要なことが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分後、すべてのトラフィックが新しいアプリにルーティングされます。上で述べたように、移行はまだ問題であるため、注意してください。

于 2012-05-17T23:35:22.120 に答える
4
于 2012-06-29T21:26:15.297 に答える