Rails6.0でローカル開発環境を構築していたところ、
各種Gemの悪さを処理して、こちらのサイトを参考に進め、
ようやくたどり着いたGitへの初pushでまさかの停滞!
エラーが出るまでの経緯も含めてまとめました
##今回出たエラーがこちら
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
fatal: the remote end hung up unexpectedly
結論から言うと、このエラーが出たらコミットするデータのサイズが大きいので、
バッファが足りてないよ。ということらしいです。
##開発環境
OS: 64bit Mac macOS Catalina 10.15.3
Ruby 2.6.3
Rails6.0
##最初に起きた問題
いつものように、
$ git init
$ git add -A
$ git commit -m "first commit"
$ git remote add origin https://github.com/Gitユーザー名/リポジトリ名/git
$ git push -u origin master
とすると、
$ git push -u origin master
Enumerating objects: 6877, done.
Counting objects: 100% (6877/6877), done.
Delta compression using up to 12 threads
Compressing objects: 100% (6430/6430), done.
Writing objects: 1% (26/6877), 26.57 MiB |〜
といった感じで、Writing objectsの箇所で静止しました。
##調べて分かったこと
調べていると、どうやら一度にコミットするデータのサイズが大きすぎるとプッシュ中に止まってしまうようだと分かりました。
100MB超えだと弾かれるそうなので、100MB以上のデータをコミットする方はこちらの記事のように、削減の必要があると思います。
しかし、僕のは26.57MiBと書いてあるので全然軽いはず…
同様に「Git push 容量」などと調べていくと、こちらやこちらに遭遇。
どうやらこのコードを書くとGitのバッファの上限値を指定できるらしい。
##やったこと
とにかく打ってみた。
$ git config http.postBuffer 524288000
↑これだとバッファの容量が524288000Bits(62.50MB)
今回プッシュしたいデータは26.57MiB(27.86MB)なので、以下でも良いと思います。
$ git config --global postBuffer 32M
##それでも止まった
大抵の人はここまででプッシュできるはずです。
% git push -u origin master
Enumerating objects: 6877, done.
Counting objects: 100% (6877/6877), done.
Delta compression using up to 12 threads
Compressing objects: 100% (6430/6430), done.
Writing objects: 100% (6877/6877), 26.57 MiB | 16.19 MiB/s, done.
Total 6877 (delta 793), reused 0 (delta 0)
この状態で15〜30分フリーズするようになりました。
一応Writing objectsのアップロードは終わってるみたいだし、進歩はしたかな笑
その後、冒頭のエラーが出ました。
##念のため確認したこと
さきほどのバッファの容量をさらに上げて試しました。
しかし、状況変わらず…
以下のコードで、バッファの上限が変更されているか確認。
$ git config --global --list
user.name=Sugeno
user.email=〜〜〜@gmail.com
sendpack.sideband=false
http.postbuffer=32M
念には念を
$ cd ~
$ vi .config
でgitconfigの中身を確認し、http.postbuffer=32Mであることをチェック。viエディタの使用法はこちらをチェック。
操作手順としては、「$ vi .config」後にバッファの値確認→指定した値になってれば「:wq→Enter」。
泣きの一回!
$ git push -u origin master
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
fatal: the remote end hung up unexpectedly
なんでや…万策尽きた…
##結果
一晩寝かせて、
・最初からアプリを見直すか
・クラウドIDE(Cloud9)
・Webサイト(二日前にデプロイしたもの)がプッシュできるか
を試してみようと思いましたが、
Twitterを見ているとプロキシを通すとプッシュできないと言っている方がいたので、自宅の固定回線ではなくスマホのテザリングでリトライしてみました。
なんと、すんなりプッシュできました笑
やはり回線の強弱やセキュリティ的要素も関係しているのかもしれません。
とはいえ、バッファの上限を上げる対策は間違いなく効いていたと思います。
少しでも参考になれば幸いです。