オープンソースプロジェクトリリースでデータベーススキーマの変更を管理する方法


9

いくつかの幼稚園から高校まで、一部の大学で使用されているオープンソースのPHP / MySQL Webアプリケーションを管理しています。私はプロジェクトの唯一の開発者でもあります。以前は、雇用主がホストするアプリケーションのソースダウンロードに過ぎませんでしたが、昨年、ドキュメント、番号付きリリース、公開変更ログなどを含む「本物の」オープンソースプロジェクトにするために取り組んできました。

アップグレードプロセスの改善を目指しています。特にITの専門家が不足している学校にとって、痛みを伴う可能性のある分野の1つは、リリース間でのデータベーススキーマの変更です。それらは頻繁に発生したり、大幅な変更になる傾向はありませんが、プロセスに関する提案をいただければ幸いです。

現在、データベースを新規インストールでセットアップするためのベースSQLインストールスクリプトを維持しています。これには、現在のリリースの完全なスキーマが含まれます。新規インストールの場合、これ以上のアクションは必要ありません。リリース間で発生する変更はupgrade-$releasever.sqlスクリプトに保存されます。スキップされたリリースについては、すべてのアップグレードスクリプトを段階的に実行する必要があります。

ユーザーの多くはシェルアクセスなしでホストを操作するため、シェルスクリプトは適していません。他の優先事項により、複雑なPHPブラウザーベースのインストーラー/アップグレードスクリプトが実現する可能性は低いです。ただし、アップグレードを簡素化するために、ブラウザーベースのPHPスクリプトを使用して何かを実行したいと思います。それへのアプローチ方法に関する提案?

回答:


3

私のプロジェクトに は、ユーザーがソフトウェアの新しいバージョンをインストールした後、ブラウザーを介して実行するupdate.phpファイルがあります。この更新スクリプトは、アクティブデータベースのテーブルに保持されているデータベースバージョン番号をチェックし、そのデータベーススキーマを最新のものに更新するデータベース変更操作を実行します。これには、データベースバージョン番号の更新が含まれます。


私はあなたのupgrade.phpスクリプトを調べましたが、それは私が考えていたもののようです。ありがとう。
マイケル、

2

Drupal CMSには、問題に対する興味深い解決策があります。PHPを使用してWebベースのソリューションを開発している場合は、一般的にDrupalを確認することをお勧めします。それは私のお気に入りのPHP CMSであり、私はそれがそこにある最高のものであると言うほど偏っています。;)

Drupalは、非常に洗練されたデータベース対話ラッパーを提供します。これにより、モジュール開発者から実際のデータベースタイプを抽象化できるため、サーバーでPostgreSQL、MySQLなどが実行されているかどうかを気にする必要がありません。独自のインターフェースを作成することもできます。hook_schemaとを含むmodule.installファイルを提供するには、すべてのモジュールが必要ですhook_install。インストール手順の実行hook_schema中に、モジュールのテーブルスキーマを宣言するために使用されhook_installます。アーキテクチャは更新の概念もサポートしているため、ユーザーがすでにモジュールをインストールしている場合は、適切な更新フックが呼び出され、テーブルスキーマを簡単に更新できます。

ご覧ください:http : //drupal.org/node/146862 Drupalがあなたに向いていない場合でも、アーキテクチャの決定から何かを学ぶことができると思います。


0

これを行うには、バージョンフォルダーを作成します。すべてのデータベーススクリプトをそのフォルダーに配置しました。これを新しい顧客に展開するときがきたとき、彼らは最新バージョンを手に入れました。

アップグレードスクリプトもこのフォルダに保存しました。これにより、顧客をバージョンxからバージョンyに移行できます。

それは最善の方法ではありません...しかし、それは私たちにとってはうまくいきました。


私が理解していれば、それは今私がそれを処理している方法に似ています-自分のユーザーがアップグレードスクリプトを自分で実行し、正しい順序で実行するようにします。
マイケル、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.