1

問題とは

Gitlab のプロジェクトのコミット ビューからバイナリ ファイルを含むコミットのリンクをプッシュすると、「500 おっと、私たちの側で問題が発生しました」という内部エラーが表示されます。
この問題は、オリジンが上記と同じコミットであるマージ リクエストを作成するときにも発生します。Production.log によると、


Started GET "/TempTest/bsp/commit/3098a49f2fd1c77be0c383994aa6655f5d15ebf8" for 127.0.0.1 at 2016-05-30 16:17:15 +0900
Processing by Projects::CommitController#show as HTML
  Parameters:{"namespace_id"=>"TempTest", "project_id"=>"bsp", "id"=>"3098a49f2fd1c77be0c383994aa6655f5d15ebf8"}

Encoding::CompatibilityError (incompatible character encodings: UTF-8 and ASCII-8BIT):
  app/views/projects/diffs/_file.html.haml:54:in `_app_views_projects_diffs__file_html_haml__1070266479743635718_49404820'
  app/views/projects/diffs/_diffs.html.haml:22:in `block in _app_views_projects_diffs__diffs_html_haml__2984561770205002953_48487320'
  app/views/projects/diffs/_diffs.html.haml:17:in `each_with_index'
  app/views/projects/diffs/_diffs.html.haml:17:in `_app_views_projects_diffs__diffs_html_haml__2984561770205002953_48487320'
  app/views/projects/commit/show.html.haml:12:in `_app_views_projects_commit_show_html_haml__3333221152053087461_45612480'
  app/controllers/projects/commit_controller.rb:30:in `show'
  lib/gitlab/middleware/go.rb:16:in `call'

Completed 500 Internal Server Error in 210ms (Views: 8.7ms | ActiveRecord: 10.5ms)

Gtilab はバイナリ ファイルをテキスト ファイルと誤検出するようです。
そのため、HTML 整形エンジンがエラーを起こしているようです ("Encoding::CompatibilityError")

Gitlab がバイナリ ファイルとテキスト ファイルを誤検出することがあるのは問題ありませんが、このような誤検出が発生すると、Gitlab サーバーが Internal Error によってトランザクションを停止することが問題です。

このような判断ミスが発生した場合でも、サーバー トランザクションを続行する方法を誰か教えてもらえませんか?
たとえば、次のような回答を想定しています。

  • 例 1) ファイルをバイナリとして強制的に認識させる。
  • 例 2) このようなエラーが発生した場合、HTML 変換をバイパスします。

解決しようとしたこと。

あるファイルにGitlab用のバイナリファイルだと強制的に認識させることができるか確認するため、.gitattributeに「*.XXXバイナリ」という記述を追加しました。Git クライアントはファイルがバイナリ ファイルであると認識し、差分はテキストを出力しませんでした。しかし、プッシュしてもGitlabでは効果がありませんでした。

バージョン情報

  • 最初は Gitlab 8.6.2 でこの問題に直面しましたが、8.8.3 でも同じ問題が発生します。
  • 私はgit-2.7.2を使用しています

ありがとうございました。

4

0 に答える 0