私は開発/ステージング/本番環境で作業していて、特にJoomlaや他のサードパーティソフトウェアへのアップグレードが必要な場合に、ある環境から別の環境にコードをプロモートするいくつかの課題に直面しています。
特定の日付以降にデータベースに対して実行されたSQLステートメントを確認して、各環境をアップグレードすることなく、それらを異なる環境に適用できる方法はありますか?
私は開発/ステージング/本番環境で作業していて、特にJoomlaや他のサードパーティソフトウェアへのアップグレードが必要な場合に、ある環境から別の環境にコードをプロモートするいくつかの課題に直面しています。
特定の日付以降にデータベースに対して実行されたSQLステートメントを確認して、各環境をアップグレードすることなく、それらを異なる環境に適用できる方法はありますか?
回答:
単純な答えはノーです。
mysqlはクエリをログに記録できますが、制限があります。環境間に1つでも違いがあると、クエリが機能しなくなります。それでも、それを行う唯一の方法はサーバー自体です。私が知る限り、JDatabaseに特別なログが追加されていないためです(コンポーネントがJDatabaseを使用しない場合、コントロールはさらに低下します)。
上記のように、完璧な世界で見ることができる方法がありますが、開発からライブに移行すると、現在独自にクエリを実行しているライブサイトがあり、現在の開発/ステージングとは「異なる」バージョン。したがって、ユーザーがライブサイトにサインアップし、開発者がJoomlaをアップグレードした場合、ユーザーテーブルを更新すると、そのユーザーを手動で再追加する必要が生じます(テーブル構造も変更される可能性があります)。ここで、1人のユーザーではなく、10人、さらには100人のユーザーを想像してください。プロセスは自動化できません。
Joomlaにはいくつかの優れた更新機能があり、テーブルでバージョンmysqlの更新を可能にします。これにより、テーブルはクエリに必要な構造を維持しますが、テーブルでの挿入や更新は追跡されないため、開発環境で更新した場合、本番環境で更新する最良の方法は、同じ手順に従って、本番環境でも更新することです。
将来的には、Joomlaがコアでデータベースの変更を追跡し、本番バージョンを開発バージョンに同期できるようになる可能性がありますが、そのようなものを構築するための作業量は非常に多く、パフォーマンスに影響を及ぼします。現在、私はそれがあるとは考えていません。
データベースは、すべてのソフトウェア開発で大きな問題になる傾向があります。特にステージングサイトやプロダクションサイトでは、同期を維持することが私たちにとっても大きな痛みです。
私が最近検討し始めたがまだ実装されていないことの1つは次のとおりです。
もう1つの「悪い方法」は、DBスキーマをエクスポートし(スキーマに関心がある場合は、データが別の動物である可能性があります)、各データベースのスキーマに対してdiffを実行することです。かなり簡単に違いを明らかにする必要があります。次に、データを統合するだけです。それで私は言いがちですが、理想的には本番環境のデータについて心配し、それをステージング環境と同期させておく必要があるだけです。その後、必要に応じてサンドボックス化し、開発を試すことができます。