2009-03-10 5 views
7

우리는 CRUD 작업을 수행하는 데있어 상당히 간단한 Django 기반 웹 사이트를 운영합니다. 필자는 로컬에서 테스트 및 개발을 수행하고 테스트가 완료되면 라이브 서버로 릴리스 및 데이터베이스 스키마 변경 사항을 체크 아웃했습니다. 최근 몇 가지 유형의 변경 사항을 발표 할 때 문제가 발생했습니다. 다음과 같은 일련의 이벤트를 상상해라이브 웹 사이트를 안전하게 업데이트하는 방법

  1. 사용자는
  2. 사이트는
  3. 사용자들이
  4. 서버에서 작업 된 양식을 제출 양식에 새 필드를 필요로 업데이트되는 웹 양식을 여는 것은 오류를 반환 2 단계에서 추가 된 새로운 필드를받을 것으로 예상했기 때문에

다른 사이트에서는 이러한 종류의 문제를 어떻게 처리합니까? 내 아이디어 :

  • 업데이트가 진행되는 동안 사이트를 오프라인으로 전환하십시오. 사용자가 웹 양식을 제출하기 전에 무한한 시간 동안 열어 놓을 수는 있지만 일정 시간이 지나면 누군가가 양식을 제출할 가능성이 거의 없기 때문에 이것은 실제로 문제를 해결하지 못합니다.
  • 트래픽이 매우 적은 시간에 자동 업데이트를 수행합니다. 다시 한번이 문제는 실제로 해결되지 않지만 우리 사이트는 그다지 인기가 없으며 3시에 업데이트하면 많은 사용자가있을 것입니다. 이 기술에 대한 한 가지 우려 사항은 실패한 자동 업데이트입니다.
  • 버전 관리 양식 이렇게하면 이전 양식이 제출되고 더 사용자 친화적 인 응답을 제공한다는 것을 서버에서 인식합니다. 이 문제를 해결할 수있는 자동화 도구가 있습니까?

생각들?

+0

문제가 있습니까? 사용자가 업그레이드 중에 양식을 제출합니다. 손을 쥐기에 충분할만큼 일반적입니까? 또는 이것이 가설적인 "언젠가는 일어날 수 있습니까?"라는 문제입니까? –

+0

@ S.Lott, 코너 케이스에 대해 걱정하지 않는다면 좋은 프로그래머가 될 수 없습니다. –

+0

진짜 질문은 "라이브 웹 사이트를 업그레이드하는 좋은 방법은 무엇입니까?"라고 생각합니다. – winsmith

답변

0

유효성 검사에서 코딩이 발생하지 않고 업데이트를 수행 할 수있는 방법을 확인할 수 없습니다. 예. 제출할 때 필드가 변경되었을 수 있으며 그에 따라 기본값을 설정하거나 거부 할 수도 있습니다.

유지 관리 기간이 다가옴에 따라 콘텐츠 제출이 줄어들어 영향을받는 사용자가 브라우저를 열어 두었던 사람들에게 미치는 영향을 최소화 할 수 있습니까?

1

큰 문제인 경우 각 양식에 숨겨진 변수의 일종으로 코드 버전을 포함시킬 수 있습니다. 제출 된 버전이 현재 실행중인 응용 프로그램 버전과 일치하지 않으면 적절한 오류를 표시하고 양식에있을 수있는 새로운 필드를 채울 수 있습니다. 조금 더 나아가 양식이 변경된 메시지 만 표시 할 수도 있습니다. 아마도 양식의 정의에 따라 일종의 해시를 생성하고이를 숨겨진 필드로 사용할 수 있습니다. 해시가 잘못되면 잘못된 양식을 제출하고 있다는 것을 알게됩니다.

2

게시 된 API (또는이 경우 UI)의 변경은 항상 까다 롭습니다. 가능한 경우 이전 버전과의 호환성을 유지합니다. 대부분의 양식에서 버전간에 기능이 변경되지 않는다고 생각합니다. 하나 또는 두 개의 필드를 추가하거나 제거 할 수 있지만 백엔드의 양식 유효성 검사를 통해 처리 할 수 ​​있습니다. 그것은 본질적으로 당신이 4 단계에서 설명하고있는 것입니다. 나는 그다지 문제를별로 고려하지 않습니다. 런타임 오류는 시간이 지남에 따라 발생합니다. 애플리케이션이 정상적으로 처리하고 문제를 사용자에게 알리는 한 정말 문제는 없습니다.

0

토요일 오후 6 시부 터 오전 6 시까 지 일요일 아침에 유지 관리를 위해 대기 할 예정입니다. (주로 내 고용 장소에 수여 됨) 사용하는 사이트가 많이 있습니다. 그 때 시스템에서 벗어나려고 계획하십시오. " 완벽하지는 않지만 아무것도 아닙니다. 이는 좋은 접근 방법입니다. 새 물건을 꺼내 테스트하고 필요한 경우 이전 버전으로 롤백 할 충분한 시간을 새기십시오. 필요하다고 생각되면 항상 "죄송합니다, 지금은 이용 가능하지 않습니다"라는 단순한 페이지를 설정하고 휴면 시간 동안 사람들에게 안내 할 수 있습니다. 일반적으로 아무도 불만을 토로 할 것입니다. 원래 언급 한 시간이 전혀 필요하지 않고 일찍 퇴근 할 필요가 없으면 불평 할 것입니다. (아마도 일을 피하기위한 변명을 원하는 가짜 사람들은 예외 일 테지만, 어쨌든 일을하지는 않을 것입니다.)

0

'올바른 방법'은 전체 오류 클래스를 정상적으로 처리하는 잘 정의 된 뷰를 갖는 것입니다. 모델에 새 필드를 추가하는 경우 (필자는 그 일이 일어난 것으로 추정하고 있음),보기는 친숙한 오류 메시지를 던지는 ValidationError 예외로 처리해야하며 사용자는 양식으로 돌아갑니다. , 다시로드 할 때 새 필드를 사용할 수 있어야합니다). 어떤 필드가 모델에 추가 되더라도 예외는 깨끗한 오류를 발생시키고 사용자를 다시 보냅니다.

관련 문제