我通过 Ansible 的同步模块使用 rsync和以下任务定义:
synchronize: src='{{ local_app_path }}/.' dest='{{ remote_app_path }}/' perms=no owner=yes rsync_opts=--delete-after
Run Code Online (Sandbox Code Playgroud)
运行此任务会生成以下命令:
rsync --delay-updates -FF --compress --archive --no-perms --rsh 'ssh -S none -o StrictHostKeyChecking=no' --rsync-path="sudo rsync" --delete-after --out-format='<<CHANGED>>%i %n%L' "../src/." "vagrant@192.168.55.55:/var/www/app/"
Run Code Online (Sandbox Code Playgroud)
我的目录布局是这样的:
src/
# ...
app/
test/
node_modules/
package.json
provisioning/
# ...
playbook.yml
.rsync-filter
Run Code Online (Sandbox Code Playgroud)
这是我的 .rsync 过滤器:
exclude /src/.env
exclude /src/node_modules
Run Code Online (Sandbox Code Playgroud)
现在我期望运行我的同步任务并在服务器上生成的目录结构如下所示(注意丢失的node_modules
文件夹):
app/
test/
package.json
Run Code Online (Sandbox Code Playgroud)
这有效。但是,一旦我node_modules
在服务器上创建了一个文件夹......
app/
test/
node_modules/
package.json
Run Code Online (Sandbox Code Playgroud)
...并再次运行同步,该node_modules
文件夹再次从服务器中删除(即使我已将其排除在 .rsync-filter 中):
app/
test/
package.json
Run Code Online (Sandbox Code Playgroud)
我希望 -node_modules …