web-dev-qa-db-ja.com

移行ファイル-更新後のSQL移行スクリプトの生成

Joomlaの更新をローカルで実行し、コードの展開+ dbの移行によって運用システムを更新する組織的な方法を探しています。これにより、運用でjoomlaを更新したり、更新の実行中にサイトを無効にする必要がなくなります。現在の更新コンポーネントは特定の関数を使用してSQL更新を実行します

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_joomlaupdate/models/default.php#L515

FinaliseUpgradeでは、いくつかのクエリをフェッチ/解析してスキーマに適用しているように見えます。これを正しく理解すると、com_admin/sql/{DBType}/*。sqlのスクリプト/プレースホルダーをループして、dbで実行する必要があるすべての新しいバージョンのsqlファイルを検出します。

これらのスクリプトの問題は、テーブルにプレフィックスが付いているため、運用データベースの移行ツールとして使用する方法がわからないことです。また、統合された単一の移行スクリプトが必要です。

Joomlaが実際に実行した変更を移行ファイルのどこかに書き込んでいるかどうかを提案できますか?

Logs/joomla_update.phpファイルには変更のトレースが含まれていますが、数文字しか記録されていないため、これらは切り捨てられています

どんな提案でも大歓迎です。

3
Bizmate

2つのシナリオ:

開発、ステージング-オーサリング、プロダクション

本番環境は読み取り専用で、ステージングではコンテンツが準備され、テストが行​​われます。 Joomlaは常にステージングで更新され、dbはコミットと共に保存され、プルインプロダクションで復元されます。

開発、ステージング、生産

コンテンツは制作時に編集されます。 Joomlaの更新はステージングで実行されます。それらをプッシュしたら、extensions/databaseに移動してFixを押します。または、大規模なサーバーの場合は、システムプラグインを使用して自動化します(onAfterRouteでいくつかのパラメーターをリッスンするプラグインを記述し、それがローカル呼び出しかどうかを確認します($ _SERVER ['REMOTE_ADDR'] = '127.0.0.1'とcronジョブをスケジュールして、それを呼び出す)。

更新

各バージョンのアップグレード後にデータベースの更新を実行するには、2つの方法があります。

自動

管理者-拡張機能-拡張機能マネージャーに移動し、左側のデータベースをクリックして、上部にある[修正]をクリックします。

このページにエラーがある場合(2.5から3.3にアップグレードする場合)、次のURLに直接アクセスしてみてください。

/administrator/index.php?option=com_installer&view=database

手動

上記が失敗した場合(下記の@Diegoのコメントも参照):

 find administrator/components/com_admin/sql/updates/mysql/3*.sql | grep mysql > 33.listsql

関連ファイルを調整します(影響を受けるバージョンはファイル名にあります)

次に、j25がdbプレフィックスである場合

cat 33.listsql | xargs cat > 33.sql
sed -i 's/#_/j25/' 33.sql
mysql -u user --password="somepass" dbname < 33.sql
1
Riccardo Zorn