私は、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の問題キューを開くことができますが、まず問題が発生していないかどうかを確認したいと思っています。ありがとう!
@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