質問: WordPressのデータをGit管理したいと考えています。 Windows上にローカル環境をbitnamiを使って構築しました。 サーバとの同期はWordMoveを使ってなんとかできそうです。 (WordMoveは強力ですね。データベース内のURLを適切に変換してくれました。) 後はGitで管理したいのてすが、データベースの内容を管理するために、mysqldumpでテキスト・ファイルへ落としたいと考えています。 Windowsのタスクを使って例えば5分毎に落とすことは可能と思いますが、無駄に重くなる上、ローカルで固定ページ生成などの後、最大5分経過しないとGit作業ファイルに反映されないのも嫌らしいです。 そこで、データベースに更新があったらダンプしたいのですが、何か方法はないでしょうか? そのようなプラグインがあればベストなのですが。 テーブル・ファイルの更新時刻の監視ではダメっぽいです。 PhpMyAdminでみてテーブルのサイズが大きくなっているのにファイルの方は元のサイズのままでした。 MySQLサービスを停止して初めて更新されました。メモリからファイルへ保存する頻度はそこそこ低そうです。 --- この辺の情報をネットで見つけることができなかったのですが、WordMoveの設定ファイルを見るとGitのファイル群を同期から外すようデフォルトで設定されているので、WordMoveとGitでWordpressのデータを管理している人はそこそこ居るはずなのです。なので、きっと同じ問題を既に解決している人が居るはずなのですが、見つけることができません。 ヒントだけでもぜひ教えて下さい。 --- 【解決】 下記プラグインで動作しました。 ``` ".$filePath.$fileName; system($command); } add_action('save_post', 'save_db', 10, 3); ?> ``` mysqldumpのパスはBitNamiがインストールする場所を前提としています。 phpもワードプレスのプラグインも初めてなので、色々可笑しいかも。 --- 【追記】 結局、mysqldumpされるものではGit管理できませんでした。 まず、リストアが異常に遅いです。これはWordMoveのオプションを参考にして数秒程度でリストアできるようになりました。 次にテーブルが全て1行になってしまう問題が発生しました。Gitでマージする際に直ぐにコンフリクトしてしまいます。 mysqldump時に`-c --order-by-primary --skip-extended-insert`オプションを付けて投稿ごとに改行されるようになりました。 しかし、投稿にPRIMARY keyが記録され、別ブランチで生成した投稿に同じPRIMARY keyが割り当てられてしまいます。これがGitでコンフリクトします。 手動で解決も不可能ではないですが、あまり現実的な気がしません。 --- 再度、プラグインを探してみたところ、VersionPressが見つかりました。(前回、結構探したのですが、ノイズが多すぎて見つからなかったようです。) データベースの中身は、wordpress/wp-content/vpdb/の下に投稿毎にファイルを分けて保存され、しかも、投稿の改行も再現されてました。なのでGitのバージョン管理で期待通りにマージできそうです。 VersionPressが知らないPluginがデータベースへ保存しているデータ等はちゃんと管理できないかもしれませんが、そのような設定のマージが必要になるケースは稀でしょう。新しい方の上書きでコンフリクトを解決すれば概ねOKの筈です。 しかも、有り難いことにGPLv3での配布でした。GitHubからダウンロードできました。 バージョン3.02をWindows+BitNami環境で使ってみました。UnDoやRollBackはうまく動きませんでしたが、Gitで直接resetすれば戻りました。また、Gitでのブランチ切り替えやマージも動作しました。別のブランチで行った2つの投稿がちゃんとマージされました。(びっくりです。) まだ若いソフトのようなので問題はそれなりにありそうですが、大事な部分はきちんと使えそうです。 --- 【追記】 VersionPressを運用してみましたが、結局使えないと判断しました。 1データベース内にバイナリなテーブルを作る。 これが原因でWordMoveでpushできなくなります。 mysqldumpで保存後削除してpush→回復すれば行けるとは思います。 2ちょっと修正する度にcommitする。 そこで、一旦無効化して使った場合、無効化以前へ戻すことができませんでした。 これでは意味がないです。 以上により、私には使えないと判断しました。(使えそうと報告していたので訂正まで。)
回答: やったことはないのですが、WordPress 側のフックで更新を検知してWordMoveを起動するのは出来ませんか? たとえばsave_postフックはDBの書き換えが終わってから呼ばれているので、ここで WordMove を何とか起動するとか。(リビジョンや添付画像も同じフックを通った気がしますのでそこは上手いこと振り分けるということで)プラグインの動作もローカルかどうかで振り分けられると思います。 【save_post | Hook | WordPress Developer Resources】