7

CRUD 操作を行うためのかなり単純な Django ベースの Web サイトがあります。私はローカルでテストと開発を行っており、テストが完了したら、リリースとデータベース スキーマの変更をライブ サーバーにチェックアウトしています。最近、いくつかの種類の変更をリリースする際に問題が発生しました。次の一連のイベントを想像してください。

  1. ユーザーが Web フォームを開く
  2. サイトが更新され、このフォームに新しいフィールドが必要になりました
  3. ユーザーが作業中のフォームを送信する
  4. 手順 2 で追加された新しいフィールドを受信することを期待しているため、サーバーはエラーを返します。

他のサイトはこの種の問題にどのように対処していますか? 私のアイデア:

  • 更新が行われている間、サイトをオフラインにします。これは実際には問題の解決にはなりません。ユーザーは Web フォームを送信する前に無限に開いたままにしておくことができますが、一定の時間が経過すると、誰もフォームを送信する可能性が低くなるからです。
  • トラフィックが非常に少ない時間帯に自動更新を行います。これでも問題は解決しませんが、私たちのサイトはそれほど人気が​​なく、午前 3 時に更新を行った場合、多くのユーザーがいるとは思えません。この手法に関する懸念の 1 つは、失敗する自動更新です。
  • サーバーが古いフォームが送信されていることを認識し、よりユーザーフレンドリーな応答を提供するように、フォームをバージョン管理します。これに役立つ自動化ツールはありますか?

考え?

4

5 に答える 5

2

公開された API (またはこの場合は UI) の変更は常に注意が必要です。可能であれば、下位互換性を維持してください。ほとんどのフォームでは、機能はバージョン間で変わらないと思います。フィールドを 1 つか 2 つ追加または削除することはできますが、それはバックエンドのフォーム検証によって処理されます。それは基本的に、ステップ 4 で説明していることです。私はそれほど大きな問題とは考えていません。実行時エラーはときどき発生します。アプリケーションが問題を適切に処理し、ユーザーに問題を通知する限り、実際には問題はありません。

于 2009-03-10T14:12:02.697 に答える
1

それが本当に大きな問題である場合は、コード バージョンを何らかの隠し変数として各フォームに含めることができます。送信されたバージョンが現在実行中のアプリケーションのバージョンと一致しない場合は、適切なエラーを表示し、フォームに存在する可能性のある新しいフィールドに入力するように依頼できます。もう少し進んで、フォームが変更されたメッセージのみを表示することもできます。おそらく、フォームの定義に基づいてある種のハッシュを作成し、それを隠しフィールドとして使用します。ハッシュが間違っている場合は、間違ったフォームを送信していることがわかります。

于 2009-03-10T14:02:02.380 に答える
0

検証で更新が発生した可能性をコーディングせずにこれを達成する方法がわかりません。例えば。送信時にフィールドが変更された可能性があることを「予測」し、それに応じてデフォルトを設定/拒否します。

影響を受けるユーザーをブラウザーを開いたままにしておくユーザーに最小限に抑えるために、メンテナンス ウィンドウが近づくにつれて、コンテンツの送信を「縮小」することについてはどうですか?

于 2009-03-10T13:57:46.930 に答える
0

私が使用しているサイトはたくさんありますが (ほとんどが私の勤務先の内部にあります)、「今週末の土曜日の午後 6 時から日曜日の午前 6 時までメンテナンスのため停止します。その時はシステムから離れてください。」完璧ではありませんが、何もありません。これは良いアプローチのようです。新しいものを出してテストし、必要に応じて古いものにロールバックするために十分な時間を割いてください. 必要に応じて、「申し訳ありませんが、現在ご利用いただけません」という簡単なページをいつでも設定して、ダウンタイム中に人々をそのページに誘導することができます。一般的に、最初に述べた時間が必要なく、早めに戻ってきた場合、誰も文句を言うことはありません (仕事を避ける言い訳をしたい怠け者は例外かもしれませんが、彼らは.

于 2009-03-10T14:32:57.407 に答える
0

それを行う「正しい」方法は、このクラス全体の障害を適切に処理する明確に定義されたビューを持つことです。必要な新しいフィールドをモデルに追加する場合 (それが起こっていると推測しています)、ビューはそれを ValidationError 例外で処理し、わかりやすいエラー メッセージをスローしてユーザーをフォームに送り返します (これはをリロードすると、新しいフィールドが使用可能になるはずです)。モデルに追加されたフィールドに関係なく、例外は明確なエラーをスローし、ユーザーを送り返します。

于 2009-03-10T18:54:14.143 に答える