4

Railsアプリをシームレスにアップグレードしたい:

意味:

  1. 移行を実行する必要がない場合は、コードを透過的にアップグレードし、デプロイ中に404にリクエストが送信されないようにします。
  2. これは難しいです。データベースをシームレスにアップグレードできるプロセスが必要です。その間、dbの更新が完了したら、Webリクエストを保留して(パイプにキューに入れて)、処理を許可します。(これは、5〜10秒の移行などの短い移行でのみ機能する必要があります)。

これをどのように達成しますか?

4

2 に答える 2

3

コードのみのアップグレード

アプリケーション コードをアップグレードするだけの場合は、パッセンジャーを使用すると、ビートを飛ばすことなくアップグレードできます。ただし、アップグレードがうまくいかない場合は保護されません。そのため、ラウンド ロビンで個別にアップグレードできる負荷分散された 2 つ以上の Web サーバーを用意することを検討する必要があります。

データベースのアップグレード

ユーザーとしては、ブラウザが 10 秒間回転するよりも、「メンテナンスのためダウン」ページを見たいと思っています。ダウンタイムは数秒程度であると説明し、ページを自動更新に設定します。

データベースのアップグレード中にダウンタイムが発生しないことに固執している場合は、いくつかのオプションがあります。

  1. 古いスキーマを有効に保つように、データベースをリファクタリングできます。これは、アプリの 2 つのバージョンを同じデータベースに対して実行し続け、時間の経過とともに新しいスキーマに移行できることを意味します。多くの「データベースのリファクタリング」記事があり、そのほとんどはトリガーなどを使用して目的の結果を達成することを提唱しています。個人的には、報酬が少ない割には大変な努力だと思います。

  2. アプリケーションによっては、書き込みより読み取りに大きく偏っている可能性があります。つまり、データベースをアップグレードしている間、キャッシュされていないデータの「メンテナンス」ページを表示できます (これは、Facebook がデータベースのアップグレードを行う方法です)。大量のデータが memcached または redis に保存されている場合、これはさらに効果的です。または、読み取り専用データベース スレーブに切り替えて、書き込みアクションを無効にすることもできます。

これが役立つことを願っています!

于 2010-01-21T15:02:06.877 に答える
0

Capistranoをご覧ください。

于 2010-01-21T09:32:11.240 に答える