Octopress 的 rsync 同步设置

/

Octopress 的 rsync 同步默认使用的是 ssh 协议,对于远程同步目录不是在用户目录的情况,同步将是一件很麻烦的事,好在 rsync 除了支持 ssh 协议外,还支持 rsync 协议。

Rakefile 进行修改:

#  ssh_user       = ""
#  ssh_port       = "22"
#  document_root  = ""
host = "111.111.111.111"
dest = "4rPcKqmlxIUg0Fjo"
rsync_delete   = true
rsync_args     = "--filter='-r_/exampledir'"  # Any extra arguments to pass to rsync
deploy_default = "rsync"

desc "Deploy website via rsync"
task :rsync do
  exclude = ""
  if File.exists?('./rsync-exclude')
    exclude = "--exclude-from '#{File.expand_path('./rsync-exclude')}'"
  end
  puts "## Deploying website via Rsync"
  # ok_failed system("rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}")
  ok_failed system("rsync -rlptz #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{host}::#{dest}")
end

服务器端 rsyncd.conf 设置:

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
[4rPcKqmlxIUg0Fjo]
    comment = example.com
    path = /var/www/example.com
    list = no
    read only = no
    write only = yes
    uid = www-data
    gid = www-data

使用 rsync 协议同步可以很方便的设置同步目录的 uid、gid 以及读写权限,并且同步目录可以在系统的任何地方,这点是 ssh 协议无法比拟的。--filter='-r_/exampledir' 是指在指定 --delete 参数时,仅在服务器端存在的文件在同步时会被删除,除了 exampledir 目录。

Comments