我正在使用静态站点生成器 Nanoc,并在本地和(古老的 Ubuntu)服务器上使用 rsync,以便我可以从命令行进行部署。
距离我上次使用 rsync 来同步该站点已经有一段时间了,但现在我得到了:
Nanoc::Extra::Piper::Error: command exited with a nonzero status code 3072 (command: rsync --group --links --perms --partial --progress --recursive --times --verbose --compress --exclude=".hg" --exclude=".svn" --exclude=".git" output/ uname@IP_ADDRESS:/home/path_to_remote_dir)
我在本地运行 rsync 2.6.9(发生错误时),因此将 rsync 升级到 3.1.3_1(OS X/Homebrew)。服务器运行 rsync 3.0.3。
这是来自 rsync 的 3072 错误代码吗?如果是,它意味着什么?
2020 年 2 月更新
在部署此软件时出现更多 rsync 问题后纳米碳我已经转向为以下站点设置 GIT nanoc deploy
:
- 从服务器复制 SSH 密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
- 在服务器上创建一个裸 GIT 仓库(在站点根目录之外)
- 在“nanoc.yaml”中设置
deploy
(如下所示) - 从本地“.gitignore”中的 nanoc 站点存储库中排除“output/”
git init
里面“输出”和…- …
git remote set-url server ssh://USER@IP:PORT/PATH_TO_BARE_REPO.git
- 在裸仓库中创建一个“.git/hooks/post-receive”文件(如下所示)
- 使其可执行
chmod +x post-receive
在“nanoc.yaml”中:
deploy:
default:
kind: git
remote: ssh://USER@IP:PORT/PATH_TO_BARE_REPO.git
branch: master
forced: true
(为了仅覆盖已更改的文件,我可能会尝试使用不带“强制”的功能,但对于大型网站来说,这很快)
在服务器上的“SITE_REPO.git/hooks/post-receive”中:
#!/bin/sh
git --work-tree=/PATH_TO_SITE_ROOT --git-dir=PATH_TO_BARE_REPO.git checkout -f
而且它运行良好。所以在这种情况下,我认为 GIT 是更好的选择。我还在git pushall
本地系统上创建了一个全局别名,以便使用一个命令推送到服务器和实时站点。
答案1
我发现一年前有人报告过此同步工具错误 3072,并且日志除了未经授权的登录失败外什么都没有显示。检查密码更改。