Behoben: Projektübertragungsfehler Gitlab URI::InvalidURIError (query conflicts with opaque)

English Deutsch

Problem

Jedes Mal, wenn ich versuchte, ein Projekt in meiner Docker-gehosteten GitLab-Instanz zu übertragen, schlug die Übertragung mit Fehler 500 fehl und ich erhielt das folgende Fehlerprotokoll:

gitlab_transfer_error.txt
==> /var/log/gitlab/gitlab-rails/production.log <==

URI::InvalidURIError (query conflicts with opaque):

lib/container_registry/client.rb:84:in `repository_tags'
app/models/container_repository.rb:94:in `manifest'
app/models/container_repository.rb:98:in `tags'
app/models/container_repository.rb:118:in `has_tags?'
app/models/project.rb:2890:in `has_root_container_repository_tags?'
app/models/project.rb:1037:in `has_container_registry_tags?'
app/services/projects/transfer_service.rb:61:in `transfer'
app/services/projects/transfer_service.rb:35:in `execute'
app/controllers/projects_controller.rb:120:in `transfer'
app/controllers/application_controller.rb:490:in `set_current_admin'
lib/gitlab/session.rb:11:in `with_session'
app/controllers/application_controller.rb:481:in `set_session_storage'
lib/gitlab/i18n.rb:105:in `with_locale'
lib/gitlab/i18n.rb:111:in `with_user_locale'
app/controllers/application_controller.rb:475:in `set_locale'
app/controllers/application_controller.rb:469:in `set_current_context'
lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'
lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'
lib/gitlab/middleware/speedscope.rb:13:in `call'
lib/gitlab/request_profiler/middleware.rb:17:in `call'
lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'
lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'
lib/gitlab/metrics/web_transaction.rb:46:in `run'
lib/gitlab/metrics/rack_middleware.rb:16:in `call'
lib/gitlab/jira/middleware.rb:19:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:21:in `call'
lib/gitlab/middleware/multipart.rb:173:in `call'
lib/gitlab/middleware/read_only/controller.rb:50:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
lib/gitlab/middleware/request_context.rb:21:in `call'
lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
config/initializers/fix_local_cache_middleware.rb:11:in `call'
lib/gitlab/middleware/compressed_json.rb:26:in `call'
lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:75:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'

Lösung

Dieser Fehler scheint aufzutreten, wenn in früheren GitLab-Versionen eine Docker-Registry konfiguriert war (ein Legacy-Docker-Repository), aber nicht verschwindet, selbst nachdem die Registry dekonfiguriert wurde.

Um das Problem zu beheben, habe ich mich mit folgendem Befehl in den Container eingeloggt:

docker_exec.sh
docker-compose exec gitlab /bin/bash

und /opt/gitlab/embedded/service/gitlab-rails/app/models/project.rb bearbeitet mit

edit_project_rb.sh
vi /opt/gitlab/embedded/service/gitlab-rails/app/models/project.rb

wo du in Zeile 2890 die folgende Funktion findest:

original_function.rb
##
# Diese Methode existiert wegen der Unterstützung für Legacy-Container-Repositories,
# die denselben Pfad wie das Projekt haben, aber möglicherweise nicht in der
# `container_repositories`-Tabelle gespeichert sind.
#
def has_root_container_repository_tags?
  return false unless Gitlab.config.registry.enabled

  ContainerRepository.build_root_repository(self).has_tags?
end

Wir wollen nur, dass GitLab die Repository-Sache ignoriert, also fügen wir return false nach der Zeile return false unless Gitlab.config.registry.enabled ein:

modified_function.rb
##
# Diese Methode existiert wegen der Unterstützung für Legacy-Container-Repositories,
# die denselben Pfad wie das Projekt haben, aber möglicherweise nicht in der
# `container_repositories`-Tabelle gespeichert sind.
#
def has_root_container_repository_tags?
  return false unless Gitlab.config.registry.enabled
  return false

  ContainerRepository.build_root_repository(self).has_tags?
end

um Gitlab vorzutäuschen, dass das Repository keine Legacy-Registries hat. Speichere danach die Datei und

restart_gitlab.sh
sudo gitlab-ctl restart

wonach du deine Repositories problemlos übertragen können solltest.


Check out similar posts by category: Docker, Git