code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

413 Request Entity Too Large - TortoiseSVN (SVN)にて

時代はGitかも知れないが、ようやく数年前からSubversion(svnserve.exe)を使うようになって、最近になってやっとSubversion on Apache WebDAVを使うようにもなった。

未だにコマンドライン版はほとんど使わずTortoiseSVNに頼り切ってるのだが、先日3GBくらいのファイルをadd/commitしようとしたところ次のエラーに出会った。

コミットに失敗しました (詳しい理由は以下のとおりです):
サーバが、リクエストへのレスポンスとして予想外の戻り値 (413 Request Entity Too Large) を送信してきました (リクエスト:
 PUT, URL: 'ファイルのSVN上のパス')

おそらく2GB以上のファイル全てで起きていた問題だと思う。

svnserve.exeをサーバーとしてsvn://でアクセスしていた時は3GB程度のファイルは普通にaddできていたので、当然サーバー側が悪いだろうと、いろいろ試行錯誤。

例えばApacheの設定ファイルhttpd.confに次の行を加えるとか。でも状況変わらず。

LimitXMLRequestBody 0
LimitRequestBody 0

結局、このスレッドに助けて頂いた。

TortoiseSVNのSettingsからNetworkを選び、Subversion server file:のEditを押す。

テキストエディタが立ち上がるので、最後の行あたりに『http-library = serf』を加える。(selfじゃないよ!)

TortoiseSVNは標準ではneonというHTTP/WebDAVライブラリを使うみたい。上記設定によってもう一方の選択肢であるserf(奴隷っていう意味らしい)に切り替えている。

しっかり解析してないからネットの検索からの情報でしかないが、2GB以上を超えたファイルをPUTする際のHTTPヘッダのサイズの情報(Content-Lengthあたり?)がおかしいのが原因なんじゃないのか、とのこと。

ま、とにかくsvnserve.exeに戻る結果とならなくてよかった!

つづき

6,000程のファイルをアップデートしようとしたところ、今度は更新中に切断されるという事象に遭遇。100ファイル程取得した後エラーで止まる。エラーが出る度にCleanupして再度Updateすればいずれ終わるのだが、根本的に解決したい。

REPORT の取得中にエラー (730053) が発生しました: 確立された接続がホスト コンピューターのソウトウェアによって中止されました。

調べてみると、今度はserfのライブラリに問題がある模様。httpd.confに次のエントリを足せばいいよ!というのを見つけたので試してみるも撃沈、変化無し。

MaxKeepAliveRequests 10000

サーバー側を最新の1.7.5にあげて、クライアント側もTortoiseSVN 1.7.7およびNightly Buildを試して見るも変わりなし。

結局上記『http-library = serf』をコメントアウトして更新したら無事完了。エラーが出たらエラーに応じて切り替えて、って使い方かなー。うーむ、SVN1.7てごわす。

関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。