LoginSignup
1
0

More than 5 years have passed since last update.

Deployerのrsyncレシピでexcludeとincludeの同時指定を行う

Last updated at Posted at 2018-07-09

以下のようなディレクトリ構造において、public/だけをrsync対象にしたい場合があるとします。

deploy_taget
├── .git/
├── src/
├── public/
├── deploy.php
└── README.md

Deployerのrsyncレシピで--include="/public" --exclude="/*"を期待し、以下のように書いてもうまく動きません。

deploy_bad.php
<?php
require 'recipe/rsync.php'

// (略)

// Rsync Settings
set('rsync_src', __DIR__);
set('rsync_dest', '{{ release_path }}');
set('rsync',[
    'include'      => ['public'],
    'include-file' => false,
    'exclude'      => ['*'],
    'exclude-file' => false,
    'filter'       => [],
    'filter-file'  => false,
    'filter-perdir'=> false,
    'flags'        => 'rz', // Recursive, with compress
    'options'      => ['delete', 'delete-excluded'],
    'timeout'      => 300,
]);

// Deploy
task('deploy', [
    'deploy:prepare',       // Create dirs on server
    'deploy:release',       // Release number on server
    'rsync',                // Send files to server
    'deploy:symlink',       // Symlink /current on server
    'cleanup',              // Cleanup old releases on server
    'success',
])->desc('Deploy Project');

これは$ rsync {{$options}} --exclude={{$exclude}} --include={{$include}} --filter={{$exclude}}の順番で決め打ちされているため、excludeに指定したものが常に最優先となってしまうためです。 (2018/07/09 現在)

Deployerのrsyncレシピでexludeとincludeを同時指定したい場合は、filterを使ってexlude/includeの順番を明示的に示すのがおすすめです。

deploy_good.php
// (略)

set('rsync',[
    'exclude'      => [],
    'exclude-file' => false,
    'include'      => [],
    'include-file' => false,
    'filter'       => [
        '+ /public',
        '- /*',
    ],
    'filter-file'  => false,
    'filter-perdir'=> false,
    'flags'        => 'rz', // Recursive, with compress
    'options'      => ['delete', 'delete-excluded'],
    'timeout'      => 300,
]);

参考: rsync で凝ったファイル名のパターンを指定する - daily dayflower

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0