web-dev-qa-db-ja.com

Drushを使用してマルチサイト設定を更新する

3つの異なるサイトが同じコードベースを共有するマルチサイトセットアップがあります。すべてのモジュールはall/modulesフォルダにあるため、すべて同じモジュールが含まれています。コードベースのモジュールとコアをdrushで更新したいのですが、それを行う方法が見つかりません。

settings.phpにはsites/defaultファイルがないため、drushはエラーをスローします。 drushがモジュールに接続して更新できるように、ダミーデータベースを作成する必要がありますか?明らかに、更新が行われた後、サイトでupdate.phpを実行する必要があります。

データベースは分離され、モジュールとコアを共有するだけです。

3
jsheffers

機能しない@sitesを使用して個々のサイトに更新を適用する代わりに、特定の1つのサイトで更新を実行することでそれを実現できました。これが私のために働いたコードです:

drush -l example.com pm-update

example.comは私のシンボリックリンクの名前です。補足:これを機能させるために、drushエイリアスを作成する必要はありませんでした。

6
jsheffers

PHPにありますが、これは私のサイトフォルダー内から使用します。

コマンドラインからの使用例:

cd /path/to/drupal/sites
php drush_updates.php

ファイル:

<?php    
/**
 * Run db updates on all of the sites in the multisite, using Drush
 */    
print "\n\n***************************************************\n";
print "This script will find all of the site dirs and run drush updb -y on them.\n\n";

$start_dir = ".";
$files = scandir($start_dir);

foreach ($files as $file) {

  if (is_dir($file) && $file != "." && $file != ".." && $file != "all") {
    print "drush updb -y on $file...\n";      
    chdir($file);        
    system("drush updb -y");
    chdir("..");
  }
}

print "\n\n*******************************************\n";
print "Finished!\n\n";    
?>
0
Richard

マルチサイト設定を更新するために私が行うことは次のとおりです。

for d in sites/*; do pushd $d; drush up -y; popd; done
0
kqw

3つの異なるsites/sitename.com/ディレクトリがありますか?その場合は、一度に1つずつcdに入れ、それぞれでdrush upを実行する必要があります。

初めて実行すると、新しいモジュールがダウンロードされ、そのサイトのDBで更新フックが実行されます。次の2回は、それらが既にダウンロードされているので、他の2つのサイトのDBで更新フックが実行されるだけです。 。

0
Mike Crittenden

私は同様の設定をしています-複数のサイトが同じコードベースと異なるDBを使用しています。シェルスクリプトを使用して、各サイトで同じdrushコマンドを実行します。スクリプトは以下のとおりです-私のサーバー設定に合わせてカスタマイズされています。関連するビットは次のとおりです。

私のDrupalルートディレクトリは/ var/www/drupal7です

各サイト(drupal7/sites内)には「.d7」が含まれています。名前に。

以下のスクリプト(d7_all_sitesと呼ばれます)は、各サイトで3つのDrushコマンドを実行できます。すべてのキャッシュをクリアし、サイトをメンテナンスモードに切り替えたり、データベースを更新したりできます。コマンドはパラメータによって与えられます。それで、モジュールを更新するとき、私はこれをします...

$ d7_all_sites mm 1 ## puts all sites into maintenance mode
$ drush up ## updates the modules
$ d7_all_sites updb ## updates each site's DB schema
$ d7_all_sites mm 0 ## takes all sites out of maintenance mode

私はスクリプト初心者なので、スクリプトを改善するための提案は大歓迎です。

#!/bin/bash
# test that at least one parameter if given, else return error message & exit
if [ $# -eq 0 ]
then
echo -e "\n  You must supply a valid parameter ...\n    cc to clear caches.\n    mm [0 or 1] for maintenance mode (0=online, 1=offline).\n    updb to update databases.\n"
exit 2
fi
## clear all caches command
if [ $1 = "cc" ]
then
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo
echo Clearing caches on $SITE ...
drush --uri=$SITE --root=/var/www/drupal7 cache-clear all
done
exit 0
fi
## maintenance mode
if [ $1 = "mm" ]
then
if [ $# -ne 2 ]
then
echo -e "\n  You must supply a parameter ...\n    0 for online.\n    1 for offline.\n"
exit 2
else
if [ $2 -eq 0 ]
then
text="online ..."
else
if [ $2 -eq 1 ]
then
text="offline ..."
echo -e "\n  You must supply a parameter ...\n    0 for online.\n    1 for offline.\n"
exit 2
fi
fi
fi
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo 
echo Putting $SITE $text
drush --uri=$SITE --root=/var/www/drupal7 vset --exact --yes maintenance_mode $2
done
exit 0
fi
# update databases
if [ $1 = "updb" ]
then
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo
echo Checking $SITE for database updates ...
drush --uri=$SITE --root=/var/www/drupal7 --yes updatedb
done
exit 0
fi
# if no commands have been run, return an error message
echo -e "\n  You must supply a valid parameter ...\n    cc to clear caches.\n    mm [0 or 1] for maintenance mode (0=online, 1=offline).\n    updb to update databases.\n"
0
penguin