遇到一個奇葩情況,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語言中某些地方的特性,不支持綁定帶下劃線的域名地址。
真相就是這么簡單,這個問題遇到的應該不多,但是一旦碰到,很難追隨到是域名下劃線的問題。
其實類型域名帶下劃線的限制還是很多的,比如微信公眾號的回掉接口也是不支持下劃線的。
所以今后考慮到兼容性起子域名的時候還是不要帶下劃線,就好比文件名、目錄等盡量不用中文導致的編碼解析問題類似。
重新配置
那么簡單記錄一下重新配置域名的過程:
- 配置文件中修改綁定的域名,配置文件:/etc/gitlab/gitlab.rb,參數:external_url
-
重新加載配置:gitlab-ctl reconfigure
-
重新啟動:gitlab-ctl restart
- 修改nginx綁定域名: /usr/local/nginx/conf/nginx.conf
- 重啟nginx:service nginx restart
以上,備忘。