오픈 소스 프로젝트 릴리스에서 데이터베이스 스키마 변경을 관리하는 방법


9

몇몇 K-12 학교와 일부 대학에서 사용하는 오픈 소스 PHP / MySQL 웹 응용 프로그램을 관리합니다. 나는 또한 프로젝트의 유일한 개발자입니다. 예전에는 고용주가 호스팅하는 응용 프로그램의 소스 다운로드에 지나지 않았지만 작년에 문서, 번호가 매겨진 릴리스, 공개 변경 로그 등을 포함한 "실제"오픈 소스 프로젝트로 만들기 위해 노력했습니다.

업그레이드 프로세스를 개선하려고 노력 중이며 잠재적으로 고통스러운 영역 중 하나 (특히 IT 전문 지식이 부족한 학교의 경우)는 릴리스 간 데이터베이스 스키마가 변경되고 있습니다. 그것들은 자주 일어나지 않거나 급격한 변화가 아니지만 그 과정에 대한 제안을 부탁드립니다.

현재 새 설치에서 데이터베이스를 설정하기 위해 기본 SQL 설치 스크립트를 유지 관리합니다. 여기에는 현재 릴리스의 전체 스키마가 포함됩니다. 새로 설치하기 위해 추가 조치가 필요하지 않습니다. 릴리스간에 발생하는 변경 사항은 upgrade-$releasever.sql스크립트 에 저장되므로 생략 된 릴리스에 대해 모든 업그레이드 스크립트를 증 분식으로 실행해야합니다.

셸 스크립트는 적합하지 않습니다. 많은 사용자가 셸 액세스 권한이없는 호스트에서 작업하기 때문입니다. 다른 우선 순위로 인해 복잡한 PHP 브라우저 기반 설치 프로그램 / 업그레이드 스크립트가 실현되지 않을 수 있습니다. 그러나 업그레이드를 단순화하기 위해 브라우저 기반 PHP 스크립트로 무언가를하고 싶습니다. 접근 방법에 대한 제안?

답변:


3

프로젝트 에는 새 버전의 소프트웨어를 설치 한 후 사용자가 브라우저를 통해 실행하는 update.php 파일이 있습니다. 이 업데이트 스크립트는 활성 데이터베이스의 테이블에 보관 된 데이터베이스 버전 번호를 확인하고 해당 데이터베이스 스키마를 최신 버전으로 가져 오는 데이터베이스 변경 작업을 수행합니다 (데이터베이스 버전 번호 업데이트 포함).


나는 upgrade.php 스크립트를 살펴 보았고 그것이 내가 생각한 것 같습니다. 감사.
Michael

2

Drupal CMS에는 문제에 대한 흥미로운 해결책이 있습니다. PHP를 사용하여 웹 기반 솔루션을 개발하는 경우 일반적으로 Drupal을 살펴 보는 것이 좋습니다. 내가 가장 좋아하는 PHP CMS이며, 그것이 최고라고 말할만큼 충분히 편향 될 것입니다. ;)

Drupal은 매우 정교한 데이터베이스 상호 작용 래퍼를 제공합니다. 모듈 개발자로부터 실제 데이터베이스 유형을 추상화 할 수 있으므로 서버가 PostgreSQL, MySQL 등을 실행하는지 여부는 실제로 신경 쓰지 않아도됩니다. 자체 인터페이스도 만들 수 있습니다. 모든 모듈이 포함 module.install 파일을 제공해야 hook_schema하고 hook_install. 설치 절차 hook_schemahook_install실행하는 동안 모듈의 테이블 스키마를 선언하는 데 사용됩니다 . 이 아키텍처는 업데이트 개념도 지원하므로 사용자가 모듈을 이미 설치 한 경우 올바른 업데이트 후크가 호출되고 테이블 스키마를 쉽게 업데이트 할 수 있습니다.

살펴보기 : http://drupal.org/node/146862 Drupal이 당신에게 적합하지 않더라도, 나는 당신이 그들의 건축 결정에서 무언가를 배울 수 있다고 확신합니다.


0

버전 폴더를 만들어이 작업을 수행했습니다. 모든 데이터베이스 스크립트를 해당 폴더에 배치했습니다. 새로운 고객에게이 제품을 출시 할 때가되면 최신 버전을 얻었습니다.

또한이 폴더에 업그레이드 스크립트를 보관했습니다. 이렇게하면 고객을 버전 x에서 버전 y로 마이그레이션 할 수 있습니다.

가장 좋은 방법은 아니지만 우리에게 효과적이었습니다.


이해하면, 지금 처리하는 방식과 비슷하게 들리므로 사용자가 업그레이드 스크립트를 직접 실행하고 올바른 순서로 수행해야합니다.
Michael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.