遇到一个奇葩情况,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
以上,备忘。