サードパーティの拡張機能によって行われたデータベースの変更を検出する方法はありますか?


7

私は開発/ステージング/本番環境で作業していて、特にJoomlaや他のサードパーティソフトウェアへのアップグレードが必要な場合に、ある環境から別の環境にコードをプロモートするいくつかの課題に直面しています。

特定の日付以降にデータベースに対して実行されたSQLステートメントを確認して、各環境をアップグレードすることなく、それらを異なる環境に適用できる方法はありますか?


あなたはstackoverflow / superuserでこの質問をすることでより良い結果を得るかもしれません、それは本当にjoomla固有ではありません。
Spunkie 14

回答:


9

単純な答えはノーです。

mysqlはクエリをログに記録できますが、制限があります。環境間に1つでも違いがあると、クエリが機能しなくなります。それでも、それを行う唯一の方法はサーバー自体です。私が知る限り、JDatabaseに特別なログが追加されていないためです(コンポーネントがJDatabaseを使用しない場合、コントロールはさらに低下します)。

上記のように、完璧な世界で見ることができる方法がありますが、開発からライブに移行すると、現在独自にクエリを実行しているライブサイトがあり、現在の開発/ステージングとは「異なる」バージョン。したがって、ユーザーがライブサイトにサインアップし、開発者がJoomlaをアップグレードした場合、ユーザーテーブルを更新すると、そのユーザーを手動で再追加する必要が生じます(テーブル構造も変更される可能性があります)。ここで、1人のユーザーではなく、10人、さらには100人のユーザーを想像してください。プロセスは自動化できません。

Joomlaにはいくつかの優れた更新機能があり、テーブルでバージョンmysqlの更新を可能にします。これにより、テーブルはクエリに必要な構造を維持しますが、テーブルでの挿入や更新は追跡されないため、開発環境で更新した場合、本番環境で更新する最良の方法は、同じ手順に従って、本番環境でも更新することです。

将来的には、Joomlaがコアでデータベースの変更を追跡し、本番バージョンを開発バージョンに同期できるようになる可能性がありますが、そのようなものを構築するための作業量は非常に多く、パフォーマンスに影響を及ぼします。現在、私はそれがあるとは考えていません。


4

データベースは、すべてのソフトウェア開発で大きな問題になる傾向があります。特にステージングサイトやプロダクションサイトでは、同期を維持することが私たちにとっても大きな痛みです。

私が最近検討し始めたがまだ実装されていないことの1つは次のとおりです。

http://phinx.org/

もう1つの「悪い方法」は、DBスキーマをエクスポートし(スキーマに関心がある場合は、データが別の動物である可能性があります)、各データベースのスキーマに対してdiffを実行することです。かなり簡単に違いを明らかにする必要があります。次に、データを統合するだけです。それで私は言いがちですが、理想的には本番環境のデータについて心配し、それをステージング環境と同期させておく必要があるだけです。その後、必要に応じてサンドボックス化し、開発を試すことができます。


私は貧しい人のやり方を、退屈なものになる可能性のあるdiffで使用しましたが、何が変わったのかを調べるのに非常に役立ちました。質問に基づいて、本番サーバーは開発サーバーよりも進んでいるようです。ワークフローの他の場所でスムーズになる場合があります。
poproar 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.