使用 git 部署时出错 (dokku) - 超时/管道损坏

Error when deploying with git (dokku) - timeout / broken pipe

我用 dokku 和 digital ocean 有一段时间了,没有任何问题

我现在在使用以下命令部署到 dokku 时遇到问题:

git remote add dokku dokku@some-ip:myapp
git push dokku develop:master

我有以下问题:

Counting objects: 528, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (509/509), done.
packet_write_wait: Connection to some-ip port 22: Broken pipe
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'dokku@some-ip:myapp'

我试试

但它不起作用。我觉得是因为推送的内容有点大...

感谢您的帮助!

更新

postBuffer 选项设置为值 209715200 后,出现以下错误:

Counting objects: 528, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (353/353), done.
Timeout, server some-ip not responding.38.00 KiB/s   
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'dokku@some-ip:myapp'

我在上传挂起前的最后一个进度提示是:

Writing objects:  87% (466/531), 33.85 MiB | 120.00 KiB/s 

首先,这个

    git config http.postBuffer 209715200 / git config ssh.postBuffer 209715200

不会有任何区别,只要您通过 SSH(端口 22)推送:

packet_write_wait: Connection to some-ip port 22: Broken pipe

您的错误与配置无关,但在您和目标点之间某处的互联网 connection/low 带宽不佳,这会导致大数据包在 tcp 中被破坏并丢失。

它被广泛讨论 here。尝试:

1) 切换到 http(由于 header 开销较小,这将增加 brake 的大小限制)

2) 减少回购规模 (repack or gc --aggressive)

However,这将起作用,只有当你即将实现它时。如果你的连接真的很糟糕,你不能物理传输大的(也因为包含多个 headers)数据包,那么唯一的解决办法:

增加带宽(切换到 LAN、更改网络等)。 这可能是客户端和接收端的要求。

这通常发生在服务器内存不足时。您可以向服务器添加更多内存或设置交换 space。以下脚本将创建 2GB 的交换 space.

sudo install -o root -g root -m 0600 /dev/null /swapfile
dd if=/dev/zero of=/swapfile bs=1k count=2048k
mkswap /swapfile
swapon /swapfile
echo "/swapfile       swap    swap    auto      0       0" | sudo tee -a /etc/fstab
sudo sysctl -w vm.swappiness=10
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

也试试 Git Garbage Collection and Clearing Application cache.