web-dev-qa-db-ja.com

2つのローカルインスタンス間でdrushがrsyncに失敗するのはなぜですか?

次のコマンドを使用して、2つのローカルdrupalリポジトリを同期しようとしています。

drush rsync

私の環境:-drush 6.1-Mac os X 10.9-drupal 7.24

私はDrupalの標準的なセキュリティの推奨事項と、次のように構成されたアクセス許可に従っています:

MBPC:files pc$ pwd
/Users/pc/Sites/mysite.dev/sites/default/files
MBPC:files pc$ ls -al
total 8
drwxrwx---+ 8 _www  staff  272 18 jul  2012 .
drwxr-xr-x+ 4 pc    staff  136 23 nov 15:08 ..
-rwxr-----+ 1 pc    _www   477 21 nov 15:19 .htaccess
drwxrwxr-x+ 3 _www  staff  102 18 jul  2012 color
drwxr-xr-x+ 3 _www  staff  102 22 nov 09:53 ctools
drwxr-x---+ 3 _www  staff  102 23 mai  2012 pictures
drwxr-x---+ 3 _www  staff  102 23 nov 16:24 private
drwxr-xr-x+ 2 _www  staff   68 24 oct 17:37 styles

ユーザーpc_wwwグループのメンバーです。

.htaccessファイルには、次の内容が含まれます(最新のDrupalセキュリティ警告に続いて)。

# Turn off all options we don't need.
Options None
Options +FollowSymLinks

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

プライベートサブディレクトリに同様の.htaccessファイルがあります。

次のコマンドを使用しています。

$ drush rsync @mysite.dev @mysite.local 

そして私はこのエラーメッセージを受け取ります:

You will destroy data from /Users/pc/Sites/mysite.local/ and replace with data from /Users/pc/Sites/mysite.dev//
Do you really want to continue? (y/n): y
rsync: failed to set times on "/Users/pc/Sites/mysite.local/sites/default/files": Operation not permitted (1)
rsync: recv_generator: mkdir "/Users/pc/Sites/mysite.local/sites/default/files/color" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
rsync: recv_generator: mkdir "/Users/pc/Sites/mysite.local/sites/default/files/ctools" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
rsync: recv_generator: mkdir "/Users/pc/Sites/mysite.local/sites/default/files/pictures" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
rsync: recv_generator: mkdir "/Users/pc/Sites/mysite.local/sites/default/files/private" failed: Permission denied (13)
*** Skipping everything below this failed directory ***
rsync: mkstemp "/Users/pc/Sites/mysite.local/sites/default/files/..htaccess.bVe3a4" failed: Permission denied (13)
rsync: failed to set permissions on "/Users/pc/Sites/mysite.local/sites/default/files/styles": Operation not permitted (1)
rsync: failed to set times on "/Users/pc/Sites/mysite.local/sites/default/files": Operation not permitted (1)
rsync: failed to set permissions on "/Users/pc/Sites/mysite.local/sites/default/files/styles": Operation not permitted (1)
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]
Could not rsync from /Users/pc/Sites/mysite.dev// to /Users/pc/Sites/mysite.local/                                                              [error]
3
PhilC

グループのメンバーになることによって、ファイルのタイムスタンプを変更したり、権限を変更したりすることはできません。ファイルの所有者またはrootである必要があります。そのファイルのもう一方になれない場合は、アクセス権を設定しないようにする必要があります。

したがって、drushrcファイル(たとえば、sites/default/drushrc.php)を変更して、rsyncコマンドに次の引数を追加してみてください。

$command_specific['rsync'] = array('mode' => 'rlptzO', 'verbose' => TRUE, 'no-perms' => TRUE);

リモートでrsyncを実行している場合は、aliases.drushrcファイル(たとえば、sites/default/aliases.drushrc.php)を編集して、次のように追加します。

$aliases['mysite.dev'] = array(
    // here are your settings such as uri, root, remote-Host, etc.

    'command-specific' => array (
      'rsync' => array('mode' => 'rlptzO', 'verbose' => TRUE, 'no-perms' => TRUE),
    ),
);
4
kenorb

これは実際には権限の問題であり、Drushではありません/ Drupalの質問ですが、ここに行きます(Cliveは正しいですが、もう少し詳細です)。

Googleで答えが見つからないというあなたの主張に懐疑的だったので、rsync: failed to set timesを自分で検索しましたが、これに対する答えを簡単に見つけることができないことに驚いていました。

リモートrsyncを実行している場合、コピーを正常に実行するには、ターゲットファイルへの書き込みアクセス権のみが必要ですが、時刻を設定するには、ファイルの所有者である必要があります。ファイルごとに所有者が異なるため、rootとしてrsyncを実行する必要がない限り、すべての時刻を設定することは困難です。あまりお勧めしません。私の好みは、すべてのファイルを特別なユーザーwww-adminが所有するようにし、グループをWebサーバーが属するものに設定することです。次に、Webサーバーから書き込み可能なファイルとディレクトリにグループ書き込みビットを設定し、それを他の場所でクリアします。

この設定では、Drushエイリアスのリモートユーザーがwww-adminであることを確認する必要があります。または、必要に応じて「pc」を引き続き使用しますが、「pc」をすべての所有者にすると、大丈夫です。 。

更新:

このアクセス許可スキームを使用する場合は、drushrc.phpファイルに以下を追加すると便利です。

$command_specific['rsync'] = array('mode' => 'rlptz');

これにより、drushはrsyncを呼び出すときにフラグ-rlptzを使用します。使用可能なさまざまなrsyncモードファイルの詳細については、man rsyncを参照してください。

2
greg_1_anderson