遇到一個奇葩情況,gitlab進入某個項目管理使用“通用”功能時直接報錯500,如下圖所示

之前也嘗試看了下日志,也沒有找到根本原因,因為系統使用一切正常除了“通用”功能,也沒有diy功能,所以懷疑可能是一些刁鉆的問題導致,比如環境、編碼等等,直到今天準備正兒八經的解決這個問題。

問題排查

先看varlog下的日志:

/var/log/gitlab/production.log

Started GET "/yun*****/edit" for 114.102.184.128 at 2020-09-23 10:39:16 +0800
Processing by ProjectsController#edit as HTML
Parameters: {"namespace_id"=>"yun****", "id"=>"yun****"}
Completed 500 Internal Server Error in 16ms (ActiveRecord: 1.9ms | Elasticsearch: 0.0ms)

URI::InvalidComponentError (bad component(expected host component): git_yun****):
lib/api/helpers/related_resources_helpers.rb:23:in `expose_url'
app/controllers/projects_controller.rb:39:in `edit'
lib/gitlab/i18n.rb:53:in `with_locale'
lib/gitlab/i18n.rb:59:in `with_user_locale'
app/controllers/application_controller.rb:411:in `set_locale'
lib/gitlab/middleware/multipart.rb:101:in `call'
lib/gitlab/request_profiler/middleware.rb:14:in `call'
ee/lib/gitlab/jira/middleware.rb:15:in `call'
lib/gitlab/middleware/go.rb:17:in `call'
lib/gitlab/etag_caching/middleware.rb:11:in `call'
lib/gitlab/middleware/rails_queue_duration.rb:22:in `call'
lib/gitlab/metrics/rack_middleware.rb:15:in `block in call'
lib/gitlab/metrics/transaction.rb:53:in `run'
lib/gitlab/metrics/rack_middleware.rb:15:in `call'
lib/gitlab/middleware/read_only/controller.rb:40:in `call'
lib/gitlab/middleware/read_only.rb:16:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/request_context.rb:18:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:27:in `call'
lib/gitlab/middleware/release_env.rb:10:in `call'


從日志里看出來是host問題,于是仍然google一番,直到在網上找到一些類似問題的描述,我看到了一些共性:

 

 

原來這是ruby語言中某些地方的特性,不支持綁定帶下劃線的域名地址。

真相就是這么簡單,這個問題遇到的應該不多,但是一旦碰到,很難追隨到是域名下劃線的問題。

其實類型域名帶下劃線的限制還是很多的,比如微信公眾號的回掉接口也是不支持下劃線的。

所以今后考慮到兼容性起子域名的時候還是不要帶下劃線,就好比文件名、目錄等盡量不用中文導致的編碼解析問題類似。

重新配置

那么簡單記錄一下重新配置域名的過程:

  1. 配置文件中修改綁定的域名,配置文件:/etc/gitlab/gitlab.rb,參數:external_url
  2. 重新加載配置:gitlab-ctl reconfigure
  3. 重新啟動:gitlab-ctl restart
  4. 修改nginx綁定域名: /usr/local/nginx/conf/nginx.conf
  5. 重啟nginx:service nginx restart

以上,備忘。

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞