web-dev-qa-db-ja.com

Drush sql-syncがマルチサイトで機能しない

私は、drushサイトのエイリアスとdrush sql-syncを、ローカル開発環境と会社の本番/ステージングサーバー(Acquia開発クラウド)の間の毎日のワークフローの一部として使用しています。これは単一サイトのインスタンスに最適ですが、マルチサイトで動作させることができませんでした。

@remoteエイリアスのサイト構造の例:

@remote
  - default.com ``drush @remote`` <-- commands not targeted with `-l` execute here
  - sitename.com ``drush @remote -l sitename.com status``
  - foobar.com ``drush @remote -l foobar.com sql-connect``

他のDrushコマンドの場合、-lスイッチを使用して特定のマルチサイトを指定するマルチサイトをターゲットに設定でき、drush statusおよびdrush sql-connect(正しいURIおよびDatabase name)。

ただし、drush sql-syncで-lを使用しようとすると、何があっても、ルートサイトのみがターゲットになります。私はデータベースを手動でダンプしてdrush sql-cli @remote -l multisite.com < db.sqlを実行することでこれを回避できますが、drush sql-sync @local -l sitename.com @drush.remote -l sitename.comを実行するよりも半分ほど速くはありません

これがバグの場合は、drushの問題キューを開くことができますが、まず問題が発生していないかどうかを確認したいと思っています。ありがとう!

4
Nick Tomlin

@aliasと-lを混在させることは、ローカルの場合はたまたま機能しますが、sql-syncではサポートされていません。これが機能する場合、2つの異なる-l /-uriオプションを区別するために--target-uriと--source-uriを使用する必要がありますが、これは実装されていません。 Drushは常にソースとターゲットのエイリアスレコードを使用して、ソースとターゲットのデータベースレコードを検索する方法を決定します。

Cliveが言うように、それを行うための最善の方法は、サイトごとに個別のエイリアスを設定することです。すべてのエイリアスを1つのファイルに入れると、エイリアスグループが自動的にエイリアスグループを作成します。

たとえば、私はこのようなことをします:

sitename.aliases.drushrc.php:

<?php

$aliases['live'] = array (
  'parent' => '@server.urpad',
  'root' => '/srv/www/sitename/htdocs',
  'uri' => 'http://sitename.com',
}

$aliases['dev'] = array (
  'root' => '/srv/www/sitename/htdocs',
  'uri' => 'http://sitename.com',
}

server.aliases.drushrc.php:

<?php

$aliases['urpad'] = array (
  'remote-Host' => 'my.remote-server.org',
  'remote-user' => 'www-admin',
}

「サーバー」エイリアスファイルを使用すると、リモートホスト情報を複製することなく、各リモートサイトを配置する場所を簡単に指定できます。

次に、それを使用するには:

drush sql-sync @sitename.live @sitename.dev
5
greg_1_anderson