新しいコンテンツを失うことなく、サイトの開発コピーからライブサイトに変更をマージするにはどうすればよいですか?


40

サイトの開発コピーで行われた作業をライブ運用コピーにマージするための最良の手順は何ですか?多くの場合、最新の機能の開発が開始されてから、サイトに多くの新しいコンテンツが追加されています。また、サイトへのほとんどの追加にはデータベースの変更が含まれます。新しいファイルをコピーするのは簡単ですが、データベースはどうですか?運用サイトを最後に更新してから追加された新しいコンテンツを失うことなく、既存の運用データベースに変更をどのようにマージしますか?これに役立つモジュールはありますか?


2
混乱を取り除く:マージと移行は2つの異なる言葉です。質問で両方を使用しました。ライブサイトが空の場合、開発コピーをライブサイト/ホストに移行する必要があります。ライブサイトに既にコンテンツがある場合、新しいコンテンツを開発コピーからライブサイトにマージする必要があります(マージはやや困難です)。あなたは何する必要があるの?
user931

回答:


16

開発サイトのコンテンツタイプ、ビュー、および構造の変更については、機能を使用してデータベースをコードにエクスポートする方法を参照してください。

コンテンツの移行には多くのオプションがありますが、単一のソリューションではありません。1つの例は、展開スイートです。


D雇用スイートは間違いなく面白そうに見えますが、まだ開発中です(まだベータ版ではありません)。自分で使用しましたか?それがカバーしていないことを知っていますか?
Chaulky

2

ここでは基本的に2つの考え方を採用しました(データベースの差分をとる3番目の考え方です。複雑さが非常に高いため、説明しません)。

1)本番データベースを削除して展開し、開発データベースのmysqldumpをインポートします。オプションで、SQLダンプ内のdev URLを参照するハードコーディングされた絶対リンクで、事前に正規表現の検索/置換を実行します。dev dbをprodにインポートした後、自動的にSQLステートメントを(通常はスクリプトを介して)実行して、devとは異なるprodの設定を変更します(たとえば、必要な外部システムに接続するための接続設定を変数テーブルに持っている場合devバージョンではなくprod外部システムを指すように変更します)。

2)buddaが述べたように、管理設定に機能モジュールを使用し、コンテンツのエクスポート/インポートにノードエクスポートモジュールを使用して、すべて削除モジュールを組み合わせます。ワークフローは次のとおりです。

  1. node_exportおよび機能を使用して、ノード/機能をファイルにエクスポートします
  2. オプションで(できれば)バージョン管理
  3. 製品システムにファイルをロードする
  4. 機能をロードするには、drushまたはadminインターフェイスを使用します
  5. drush delete-allまたはadminインターフェイスを使用して、インポートするタイプのすべてのノードを削除します
  6. drush ne-importまたは管理インターフェイスを使用して、エクスポートしたノードファイルからノードをインポートします。

1つの注意点として、コンテンツが一方向にのみ流れる標準ワークフローを採​​用することを強くお勧めします。Dev-> ProdまたはProd-> Devのいずれか(私はこれを好みます)。

私はこれを行っており、いくつかの大きなシステムでこれを行っていますが、かなり良い結果が得られていますが、このリンゴをスライスする方法は常にたくさんあります。


オプション1では、開発サイトにないライブサイトに追加されたコンテンツをどのように再作成しますか?dev dbですべてを上書きし、いくつかの設定/変数を変更しているようです。また、現在あなたのサイトではどの考え方を使用していますか?それぞれのアプローチに賛否両論はありますか?
Chaulky

オプション1では、node_exportを使用して定期的にコンテンツを送信します(以前のコンテンツを削除しました)。以前は、devとprodの両方でコンテンツを変更していました。これは実際に私が見たいくつかの場所での一般的なシナリオですが、明らかに理想的ではありません。これが、コンテンツをdev-> prodまたはprod-> devに追加し、方向性を採用し、それに固執する理由ですが、両方を行わないようにします。はい、基本的に上書きしますが、消去と再構築のようなものです。私の新しい仕事では、#2を行います。私の古い仕事では、#1を行いましたが、#2に移行しています(まだ相談中です)。
coderintherye

1

SQLファイルのサイトのライブサイトコピーと開発コピーのデータベースをダンプします(両方のダンプに同じパラメーターと設定を使用します)。
次に、小さな比較ツールExamDiffを使用して両方のSQLファイルを比較します。ファイルの違いを異なる色で並べて表示します。スクロールせずに、違いに直接ジャンプすることもできます。違いを調べて、ライブサイトのSQLファイルに行を追加/編集します。そのファイルに開発環境の絶対パス/ URLがないことを確認してください。完了です!ライブサイトのデータベースを復元する時間。
あなたの人生を楽にします:最初のステップでは、変更されたテーブルのみをダンプします。たとえば、別のテーブルを対象とする開発コピーのモジュールを編集した場合、このテーブルのみをダンプします。特定のテーブルがわからない場合は、データベース全体のダンプで問題ありません。


この手法には、いくつかの重要な状況で厳しい制限があります。たとえば、開発サイトに新しいノードがある場合、2つのデータベースの両方に同じノードIDのエントリが含まれ、SQLデータベースのテキストダンプから参照を解決してマージすることはできません。この種の操作は、他の回答で述べたように、機能とデプロイを介してより適切に処理されます。
greg_1_anderson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.