Cách quản lý các thay đổi lược đồ cơ sở dữ liệu trong các bản phát hành dự án nguồn mở


9

Tôi quản lý một ứng dụng web PHP / MySQL nguồn mở được sử dụng bởi một vài trường K-12 và một số trường cao đẳng. Tôi cũng là nhà phát triển duy nhất của dự án. Mặc dù trước đây ít hơn một lần tải xuống nguồn của một ứng dụng mà chủ nhân của tôi lưu trữ, tôi đã làm việc trong năm qua để biến nó thành một dự án nguồn mở "thực sự", với tài liệu, bản phát hành được đánh số, thay đổi công khai, v.v.

Tôi đang tìm cách cải thiện quá trình nâng cấp và một trong những lĩnh vực có thể gây đau đớn (đặc biệt là đối với các trường bị thiếu chuyên môn về CNTT) là trong các thay đổi đối với lược đồ cơ sở dữ liệu giữa các bản phát hành. Chúng không có xu hướng xảy ra thường xuyên hoặc thay đổi mạnh mẽ nhưng tôi sẽ đánh giá cao các đề xuất về quy trình.

Hiện tại, tôi duy trì tập lệnh cài đặt SQL cơ sở để thiết lập cơ sở dữ liệu trong bản cài đặt mới. Điều này bao gồm lược đồ hoàn chỉnh cho bản phát hành hiện tại; không cần thêm hành động nào cho cài đặt mới. Các thay đổi xảy ra giữa các bản phát hành được lưu trữ trong upgrade-$releasever.sqlcác tập lệnh và cần phải tăng dần tất cả các tập lệnh nâng cấp cho bất kỳ bản phát hành nào bị bỏ qua.

Các tập lệnh Shell không phù hợp, bởi vì nhiều người dùng của chúng tôi hoạt động trên máy chủ mà không có quyền truy cập shell. Do các ưu tiên khác, tập lệnh nâng cấp / cài đặt dựa trên trình duyệt PHP phức tạp khó có thể thành hiện thực. Tuy nhiên, tôi muốn làm một cái gì đó với tập lệnh PHP dựa trên trình duyệt để đơn giản hóa việc nâng cấp. Gợi ý về cách tiếp cận nó?

Câu trả lời:


3

Dự án của tôi có tệp update.php mà người dùng chạy qua trình duyệt của họ sau khi họ đã cài đặt phiên bản mới của phần mềm. Tập lệnh cập nhật đó kiểm tra số phiên bản cơ sở dữ liệu được lưu trong bảng trong cơ sở dữ liệu đang hoạt động và có bất kỳ cơ sở dữ liệu nào thay đổi các hoạt động sẽ đưa lược đồ cơ sở dữ liệu đó lên đến phiên bản mới nhất, bao gồm cập nhật số phiên bản cơ sở dữ liệu đó.


Tôi đã xem qua tập lệnh nâng cấp của bạn và đó dường như là những gì tôi nghĩ. Cảm ơn.
Michael

2

Drupal CMS có một giải pháp thú vị cho vấn đề của bạn. Tôi khuyên bạn nên xem Drupal nói chung, nếu bạn đang phát triển các giải pháp dựa trên web bằng PHP. Nó là PHP CMS yêu thích của tôi và tôi sẽ đủ thành kiến ​​để nói rằng nó là thứ tốt nhất ngoài kia. ;)

Drupal cung cấp trình bao bọc tương tác cơ sở dữ liệu khá tinh vi. Nó cho phép trừu tượng loại cơ sở dữ liệu thực tế từ nhà phát triển mô-đun, vì vậy bạn không thực sự quan tâm liệu máy chủ có chạy PostgreQuery, MySQL, v.v. Bạn cũng có thể tạo giao diện của riêng mình. Mỗi mô-đun được yêu cầu để cung cấp tệp module.install chứa hook_schemahook_install. hook_schemađược sử dụng để khai báo lược đồ bảng cho mô-đun, trong khi hook_installchạy thủ tục cài đặt. Kiến trúc cũng hỗ trợ khái niệm cập nhật, vì vậy nếu người dùng đã cài đặt mô-đun, các móc cập nhật đúng sẽ được gọi và cho phép cập nhật lược đồ bảng một cách dễ dàng.

Hãy xem: http://drupal.org/node/146862 Ngay cả khi Drupal không dành cho bạn, tôi chắc chắn bạn có thể học được điều gì đó từ các quyết định kiến ​​trúc của họ.


0

Chúng tôi đã làm điều này bằng cách tạo các thư mục phiên bản. Chúng tôi đặt tất cả các tập lệnh cơ sở dữ liệu trong thư mục đó. Khi đến lúc đưa ra một khách hàng mới, họ đã có phiên bản mới nhất.

Chúng tôi cũng giữ bất kỳ kịch bản nâng cấp nào trong thư mục này. Bằng cách đó, chúng tôi có thể di chuyển một khách hàng từ phiên bản x sang phiên bản y.

Đó không phải là phương pháp tốt nhất ... nhưng nó hiệu quả với chúng tôi.


Nếu tôi hiểu, điều đó nghe có vẻ giống như cách tôi xử lý bây giờ - đặt người dùng của tôi chịu trách nhiệm tự chạy các kịch bản nâng cấp và theo đúng thứ tự.
Michael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.