- GitLab 설치 상태 가져오기
- RPM ‘패키지가 이미 설치되어 있습니다’ 오류
- 설치된 패키지에 의해 폐기된 패키지
- 프로젝트 > 설정 > 리포지토리에 액세스할 때 500 오류
PG::UndefinedColumn: ERROR:..
메시지와 함께 500 오류- 오류: 내부 GitLab API에 연결 실패
- 서명 검증 중 오류 발생
Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] 명령이 3600초 후에 시간 초과됨
- 누락된 자산 파일
- ActiveRecord::LockWaitTimeout 오류, 대기 후 재시도
문제 해결
Offering: Self-managed
GitLab 설치 상태 가져오기
sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true
RPM ‘패키지가 이미 설치되어 있습니다’ 오류
RPM을 사용 중이며 GitLab Community Edition에서 GitLab Enterprise Edition으로 업그레이드하는 경우 다음과 같은 오류가 발생할 수 있습니다:
package gitlab-7.5.2_omnibus.5.2.1.ci-1.el7.x86_64 (which is newer than gitlab-7.5.2_ee.omnibus.5.2.1.ci-1.el7.x86_64) is already installed
--oldpackage
옵션으로 이 버전 확인을 무시할 수 있습니다:
sudo rpm -Uvh --oldpackage gitlab-7.5.2_ee.omnibus.5.2.1.ci-1.el7.x86_64.rpm
설치된 패키지에 의해 폐기된 패키지
CE 및 EE 패키지는 서로 폐기하고 대체하도록 표시되어 있어 두 패키지가 동시에 설치되고 실행되지 않도록 합니다.
CE에서 EE로 또는 그 반대로 전환할 때 로컬 RPM 파일을 사용 중인 경우 yum
대신 rpm
을 사용하여 패키지를 설치해야 합니다. yum
을 사용하려고 하면 다음과 같은 오류가 발생할 수 있습니다:
Cannot install package gitlab-ee-11.8.3-ee.0.el6.x86_64. It is obsoleted by installed package gitlab-ce-11.8.3-ce.0.el6.x86_64
이 문제를 피하기 위해서는 다음 중 하나를 수행하십시오:
-
수동으로 다운로드한 패키지로 업그레이드하는 방법 섹션에서 제공된 동일한 지침을 사용합니다.
-
명령에 제공된 옵션에
--setopt=obsoletes=0
를 추가하여 yum에서 이 확인을 일시적으로 비활성화합니다.
프로젝트 > 설정 > 리포지토리에 액세스할 때 500 오류
이 오류는 GitLab이 CE > EE > CE로 변환된 후 다시 EE로 돌아갈 때 발생합니다.
프로젝트의 리포지토리 설정을 볼 때 로그에서 이 오류를 확인할 수 있습니다:
Processing by Projects::Settings::RepositoryController#show as HTML
Parameters: {"namespace_id"=>"<namespace_id>", "project_id"=>"<project_id>"}
Completed 500 Internal Server Error in 62ms (ActiveRecord: 4.7ms | Elasticsearch: 0.0ms | Allocations: 14583)
NoMethodError (undefined method `commit_message_negative_regex' for #<PushRule:0x00007fbddf4229b8>
Did you mean? commit_message_regex_change):
이 오류는 EE 기능이 CE 인스턴스에 처음 EE로 이동할 때 추가되었기 때문에 발생합니다.
인스턴스가 CE로 다시 이동한 후 다시 EE로 업그레이드하면 push_rules
테이블이 데이터베이스에 이미 존재하게 됩니다. 따라서 마이그레이션이 commit_message_regex_change
열을 추가할 수 없습니다.
이로 인해 EE 테이블의 백포트 마이그레이션이 제대로 작동하지 않습니다. 백포트 마이그레이션은 CE를 실행할 때 데이터베이스의 특정 테이블이 존재하지 않는다고 가정합니다.
이 문제를 해결하려면:
-
데이터베이스 콘솔을 시작합니다:
sudo gitlab-rails dbconsole --database main
-
누락된
commit_message_negative_regex
열을 수동으로 추가합니다:ALTER TABLE push_rules ADD COLUMN commit_message_negative_regex VARCHAR; # psql 종료 \q
-
GitLab을 다시 시작합니다:
sudo gitlab-ctl restart
PG::UndefinedColumn: ERROR:..
메시지와 함께 500 오류
업그레이드 후, 로그에서 PG::UndefinedColumn: ERROR:...
와 유사한 메시지가 표시되면서 500
오류가 발생하는 경우, 이러한 오류는 다음 중 하나로 인해 발생할 수 있습니다:
- 데이터베이스 마이그레이션이 완료되지 않음. 마이그레이션이 완료될 때까지 기다리세요.
- 데이터베이스 마이그레이션이 완료되었지만, GitLab이 새로운 스키마를 로드해야 함. 새로운 스키마를 로드하려면 GitLab을 재시작하세요.
오류: 내부 GitLab API에 연결 실패
별도의 GitLab Pages 서버에서 Failed to connect to the internal GitLab API
오류가 발생하면,
GitLab Pages 관리 위기 처리를 참조하세요.
서명 검증 중 오류 발생
apt-get update
를 실행할 때 이 오류가 발생하면:
서명 검증 중 오류 발생
다음 명령어로 GitLab 패키지 서버의 GPG 키를 업데이트하세요:
curl --silent "https://packages.gitlab.com/gpg.key" | apt-key add -
apt-get update
Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] 명령이 3600초 후에 시간 초과됨
데이터베이스 스키마 및 데이터 변경(데이터베이스 마이그레이션)이 실행하는 데 1시간 이상 걸려야 하는 경우,
업그레이드가 timed out
오류로 실패합니다:
FATAL: Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] (gitlab::database_migrations line 51)
had an error: Mixlib::ShellOut::CommandTimeout: bash[migrate gitlab-rails database]
(/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16)
had an error: Mixlib::ShellOut::CommandTimeout: Command timed out after 3600s:
이 오류를 수정하려면:
-
남은 데이터베이스 마이그레이션을 실행하세요:
sudo gitlab-rake db:migrate
이 명령은 완료하는 데 매우 오랜 시간이 걸릴 수 있습니다. SSH 세션이 중단되면 프로그램이 중단되지 않도록
screen
또는 다른 방법을 사용하세요. -
업그레이드를 완료하세요:
sudo gitlab-ctl reconfigure
-
puma
및sidekiq
서비스를 핫 리로드하세요:sudo gitlab-ctl hup puma sudo gitlab-ctl restart sidekiq
누락된 자산 파일
업그레이드 후, GitLab이 이미지, JavaScript 및 스타일 시트와 같은 자산을 올바르게 제공하지 않을 수 있습니다.
500 오류를 발생시키거나 웹 UI가 제대로 렌더링되지 않을 수 있습니다.
확장된 GitLab 환경에서 로드 밸런서 뒤에 있는 한 웹 서버에서 이러한 문제가 발생하는 경우, 문제가 간헐적으로 발생합니다.
자산을 다시 컴파일하는 Rake 작업은 /opt/gitlab/embedded/service/gitlab-rails/public/assets
에서 미리 컴파일된 자산을 제공하는 Omnibus 설치에는 적용되지 않습니다.
잠재적인 원인 및 해결책:
ActiveRecord::LockWaitTimeout 오류, 대기 후 재시도
드문 경우지만, Sidekiq가 바쁘고 마이그레이션이 변경하려는 테이블을 잠글 수 있습니다.
이 문제를 해결하려면 GitLab을 읽기 전용 모드로 설정하고 Sidekiq를 중지해야 합니다.
gitlab-ctl stop sidekiq
이전 프로세스
가장 가능성이 높은 원인은 오래된 Puma 프로세스가 실행 중인 경우로, 클라이언트에게 GitLab의 이전 릴리스에서 자산 파일을 요청하도록 지시합니다. 해당 파일이 더 이상 존재하지 않기 때문에
HTTP 404 오류가 반환됩니다.
재부팅이 이러한 이전 Puma 프로세스가 더 이상 실행되지 않도록 보장하는 가장 좋은 방법입니다.
또는:
-
Puma 중지:
gitlab-ctl stop puma
-
남아 있는 Puma 프로세스를 확인하고 종료합니다:
ps -ef | egrep 'puma[: ]' kill <processid>
-
ps
를 사용하여 Puma 프로세스가 중지되었는지 확인합니다. -
Puma 시작
gitlab-ctl start puma
중복 스프로켓 파일
컴파일된 자산 파일은 각 릴리스에서 고유한 파일 이름을 가집니다. 스프로켓 파일은 애플리케이션 코드의 파일 이름에서 고유한 파일 이름으로 매핑을 제공합니다.
/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest*.json
스프로켓 파일이 하나만 있는지 확인하세요. Rails는 첫 번째 것을 사용합니다.
중복 스프로켓 파일에 대한 검사는 Omnibus GitLab 업그레이드 중에 실행됩니다:
GitLab은 이전 설치에서 정리해야 할 낡은 파일을 발견했습니다.
다음 파일을 삭제해야 합니다:
/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest-e16fdb7dd73cfdd64ed9c2cc0e35718a.json
이 문제를 해결하기 위한 옵션은 다음과 같습니다:
-
패키지 업그레이드의 출력이 있는 경우, 지정된 파일을 삭제합니다. 그런 다음 Puma를 다시 시작합니다:
gitlab-ctl restart puma
-
메시지가 없는 경우, 다시 설치를 수행합니다 (자세한 내용은 불완전한 설치를 참조하세요)하여 다시 생성합니다.
-
모든 스프로켓 파일을 제거한 다음 불완전한 설치에 대한 지침을 따릅니다.
불완전한 설치
불완전한 설치가 이 문제의 원인일 수 있습니다.
패키지를 확인하여 문제가 있는지 확인합니다:
-
Debian 배포판의 경우:
apt-get install debsums debsums -c gitlab-ee
-
Red Hat/SUSE (RPM) 배포판의 경우:
rpm -V gitlab-ee
불완전한 설치를 수정하기 위해 패키지를 다시 설치합니다:
-
설치된 버전 확인
-
Debian 배포판의 경우:
apt --installed list gitlab-ee
-
Red Hat/SUSE (RPM) 배포판의 경우:
rpm -qa gitlab-ee
-
-
설치된 버전을 지정하여 패키지를 다시 설치합니다. 예를 들어 14.4.0 엔터프라이즈 에디션:
-
Debian 배포판의 경우:
apt-get install --reinstall gitlab-ee=14.4.0-ee.0
-
Red Hat/SUSE (RPM) 배포판의 경우:
yum reinstall gitlab-ee-14.4.0
-
NGINX Gzip 지원
nginx['gzip_enabled']
가 비활성화되었는지 확인하세요:
grep gzip /etc/gitlab/gitlab.rb
이로 인해 일부 자산이 제공되지 않을 수 있습니다.
더 읽어보기 관련된 이슈 중 하나에서.