新しいコンテンツを失わずに、サイトの開発コピーからライブ サイトに変更をマージするにはどうすればよいですか?
質問
サイトの開発コピーで行われた作業をライブ運用コピーにマージするための最良の手順は何ですか?最新機能の開発が開始されて以来、多くの新しいコンテンツがサイトに追加されていることがよくあります。また、サイトへの追加のほとんどにはデータベースの変更が伴います。新しいファイルをコピーするのは簡単ですが、データベースはどうなるでしょうか?前回運用サイトを更新してから追加された新しいコンテンツを失わずに、変更内容を既存の運用データベースにマージするにはどうすればよいでしょうか?これに役立つモジュールはありますか?
他のヒント
ここでは基本的に 2 つの考え方を採用しました (3 番目の考え方は、データベースの差分を実行します。非常に複雑になるため説明しません)。
1) 運用データベースを削除し、開発データベースの mysqldump をインポートしてデプロイします。必要に応じて、SQL ダンプ内の開発 URL を参照するハードコーディングされた絶対リンクに対して、事前に正規表現の検索/置換を実行します。開発データベースを本番環境にインポートした後、SQL ステートメントを (通常はスクリプト経由で) 自動的に実行し、本番環境と開発環境で異なる設定を変更します (たとえば、外部システムに接続するために必要な接続設定が変数テーブルにある場合があります)。開発バージョンではなく本番環境の外部システムを指すように変更します)。
2) を使用します。 特徴 budda が述べたように、管理者設定用のモジュールを使用し、 ノードのエクスポート と組み合わせたコンテンツのエクスポート/インポート用モジュール すべて削除 モジュール。したがって、ワークフローは次のようになります。
- node_export と features を使用してノード/フィーチャをファイルにエクスポートします
- オプションで (できれば) バージョン管理
- 本番システムにファイルをロードする
- drush または管理インターフェイスを使用して機能をロードする
- drush delete-all または管理インターフェイスを使用して、インポートするタイプのすべてのノードを削除します
- drush ne-import または管理インターフェイスを使用して、エクスポートしたノード ファイルからノードをインポートします。
注意点として、コンテンツが一方向のみに進む標準的なワークフローを採用することを強くお勧めします。Dev -> Prod または Prod -> Dev (私はこれを好みます)。
私はこれを実行し、いくつかの大規模システムでこれを実行しており、かなり良い結果が得られていますが、このリンゴをスライスする方法は常にたくさんあります。自分にとって最適な方法を選択してください。
ライブサイトのデータベースのダンプデータベースSQLファイルのサイトのコピーと開発コピー(両方のダンプに同じパラメーターと設定を使用します)。
次に、小さな比較ツールを使用して両方のSQLファイルを比較します Examdiff. 。異なる色でファイルの違いを並べて表示します。違いに直接ジャンプすることもできます(スクロールせずに)。違いを調べ、ライブサイトのSQLファイルに行を追加/編集します。そのファイルに開発環境の絶対パス/URLがないことを確認してください。それは完了です!ライブサイトのデータベースを復元する時間。
あなたの人生を楽にします: 最初のステップでは、変更されたテーブルのみをダンプします。たとえば、別のテーブルをターゲットにする開発コピーのモジュールを編集した場合、このテーブルのみをダンプします。特定のテーブルがわからない場合は、データベース全体のダンプ全体が問題ありません。