2009-03-10 43 views
7

Chúng tôi có trang web dựa trên Django khá đơn giản để thực hiện các hoạt động CRUD. Tôi đã làm thử nghiệm và phát triển cục bộ và sau đó kiểm tra các bản phát hành và thay đổi lược đồ cơ sở dữ liệu trên máy chủ trực tiếp sau khi thử nghiệm được thực hiện. Gần đây, chúng tôi đã gặp sự cố khi phát hành một số loại thay đổi. Hãy tưởng tượng chuỗi sự kiện sau:Cách cập nhật an toàn trang web trực tiếp

  1. tài khoản mở ra một mẫu web
  2. Site được cập nhật để đòi hỏi lĩnh vực mới vào mẫu này
  3. tài khoản nộp hình thức mà họ đã làm việc trên
  4. Server trả về một lỗi vì dự kiến ​​sẽ nhận được trường mới đã được thêm vào trong bước 2

Các trang web khác xử lý các loại vấn đề này như thế nào? Ý tưởng của tôi:

  • Đưa trang web ngoại tuyến trong khi cập nhật đang được thực hiện. Điều này không thực sự giải quyết vấn đề, bởi vì người dùng có thể mở biểu mẫu web trong một khoảng thời gian trước khi gửi, nhưng sau một khoảng thời gian nhất định, không ai có thể gửi biểu mẫu.
  • Thực hiện cập nhật tự động ở thời gian lưu lượng rất thấp. Một lần nữa điều này không thực sự giải quyết vấn đề, nhưng trang web của chúng tôi không phải là phổ biến và nếu chúng tôi đã cập nhật lúc 3: 00a tôi nghi ngờ sẽ có nhiều người dùng. Một mối quan tâm với kỹ thuật này là cập nhật tự động không thành công.
  • Biểu mẫu phiên bản để máy chủ nhận ra rằng biểu mẫu cũ đang được gửi và cung cấp phản hồi thân thiện với người dùng hơn. Có các công cụ tự động nào có thể trợ giúp điều này không?

Suy nghĩ?

+0

Sự cố - người dùng gửi biểu mẫu trong quá trình nâng cấp - đủ phổ biến để vặn tay của bạn? Hay đây là một giả thuyết "có thể xảy ra một ngày nào đó"? –

+0

@ S.Lott, chúng tôi sẽ không lập trình tốt nếu chúng tôi không lo lắng về các trường hợp góc. –

+0

Tôi nghĩ câu hỏi thực sự là "Cách tốt để nâng cấp trang web trực tiếp là gì?" – winsmith

Trả lời

0

Tôi không thể thấy cách bạn có thể đạt được điều này mà không cần mã hóa trong quá trình xác thực của bạn khả năng xảy ra sự cố cập nhật. ví dụ. "dự đoán" rằng các trường có thể đã thay đổi khi gửi và cài đặt mặc định/từ chối tương ứng.

Còn nội dung gửi "thu nhỏ lại" nội dung như cách tiếp cận cửa sổ bảo trì, để giảm thiểu người dùng bị ảnh hưởng đối với những người đã để trình duyệt của họ mở?

1

Nếu nó thực sự là một vấn đề lớn, bạn có thể bao gồm phiên bản mã như một loại biến ẩn trong mỗi biểu mẫu của bạn. Nếu phiên bản được gửi không khớp với phiên bản hiện đang chạy của ứng dụng, bạn có thể hiển thị lỗi thích hợp và yêu cầu họ điền vào bất kỳ trường mới nào có thể tồn tại trên biểu mẫu. Bạn thậm chí có thể đi xa hơn một chút và chỉ hiển thị các thông báo mà biểu mẫu đã thay đổi. Có thể tạo một số loại băm dựa trên định nghĩa của biểu mẫu và sử dụng nó làm trường ẩn. Nếu băm sai, bạn biết họ đang gửi biểu mẫu không chính xác.

2

Thay đổi đối với API được xuất bản (hoặc giao diện người dùng, trong trường hợp này) luôn phức tạp. Nếu có thể, hãy duy trì khả năng tương thích ngược. Đối với hầu hết các biểu mẫu, tôi sẽ cho rằng chức năng sẽ không thay đổi giữa các phiên bản. Bạn có thể thêm hoặc xóa một hoặc hai trường, nhưng điều đó sẽ được xử lý bằng xác thực biểu mẫu trên chương trình phụ trợ. Đó là bản chất những gì bạn mô tả trong bước 4. Tôi không thực sự coi đó là một vấn đề; Thời gian chạy lỗi xảy ra từ thời gian khác - Miễn là ứng dụng của bạn xử lý nó một cách duyên dáng và thông báo cho người sử dụng của vấn đề, sau đó không có vấn đề thực sự.

0

Có rất nhiều trang web tôi sử dụng (được cấp, chủ yếu là nội bộ nơi làm việc của tôi) công bố một cái gì đó như "Chúng tôi sẽ ngừng bảo trì vào cuối tuần này từ 6:00 chiều thứ Bảy đến 6:00 sáng chủ nhật Hãy lên kế hoạch để tắt hệ thống vào lúc đó. " Trong khi nó không hoàn hảo, không có gì là, và điều này có vẻ như một cách tiếp cận tốt. Chỉ cần khắc ra rất nhiều thời gian để đưa ra những thứ mới, kiểm tra nó, và quay trở lại cũ nếu cần thiết. Nếu bạn cảm thấy cần thiết, bạn luôn có thể thiết lập một trang đơn giản có nội dung "Rất tiếc, hiện chúng tôi không có mặt" và hướng mọi người đến đó trong thời gian ngừng hoạt động. Nói chung không ai sẽ phàn nàn nếu bạn không cần tất cả thời gian ban đầu bạn nói và bạn đã dậy sớm (có thể những kẻ tát tiền muốn một cái cớ để tránh làm việc sẽ là ngoại lệ, nhưng có lẽ họ cũng không làm việc).

0

Cách 'chính xác' để thực hiện điều đó là có các chế độ xem được xác định rõ ràng xử lý toàn bộ lớp thất bại này một cách duyên dáng. Trong trường hợp thêm một trường mới vào mô hình của bạn là bắt buộc (tôi giả sử đó là những gì đang xảy ra), khung nhìn nên xử lý với trường hợp ngoại lệ ValidationError để gửi một thông báo lỗi thân thiện và gửi người dùng trở lại biểu mẫu (, khi được nạp lại, nên có trường mới có sẵn). Bất kể trường nào được thêm vào mô hình, ngoại lệ sẽ ném một lỗi sạch và gửi lại cho người dùng.

Các vấn đề liên quan