프로젝트 문제 해결

프로젝트 작업 중 다음과 같은 문제에 직면하거나 특정 작업을 완료하기 위한 대체 방법이 필요할 수 있습니다.

커밋 데이터를 가져오는 중 오류가 발생했습니다

프로젝트를 방문할 때 커밋 데이터를 가져오는 중 오류가 발생했습니다라는 메시지가 표시될 수 있습니다.

이는 브라우저에서 광고 차단기를 사용하는 경우입니다.

해결책은 접근하려는 GitLab 인스턴스에 대한 광고 차단기를 비활성화하는 것입니다.

SQL 쿼리를 사용하여 프로젝트 찾기

a Rails console session에서 SQL 쿼리를 기반으로 프로젝트의 배열을 찾고 저장할 수 있습니다:

# '%ject'로 끝나는 프로젝트 찾기
projects = Project.find_by_sql("SELECT * FROM projects WHERE name LIKE '%ject'")
=> [#<Project id:12 root/my-first-project>>, #<Project id:13 root/my-second-project>>]

프로젝트 또는 리포지토리 캐시 지우기

프로젝트 또는 리포지토리가 업데이트되었지만 UI에 반영되지 않는 경우, 프로젝트 또는 리포지토리의 캐시를 지워야 할 수 있습니다.

a Rails console session을 통해 다음 방법 중 하나로 수행할 수 있습니다:

경고:
데이터를 변경하는 명령은 올바르게 실행되지 않거나 적절한 조건에서 실행되지 않으면 손상을 유발할 수 있습니다.

항상 먼저 테스트 환경에서 명령을 실행하고, 복구할 수 있는 백업 인스턴스를 준비하세요.

## 프로젝트 캐시 지우기
ProjectCacheWorker.perform_async(project.id)

## 리포지토리 .exists? 캐시 지우기
project.repository.expire_exists_cache

삭제 대기 중인 프로젝트 찾기

삭제될 프로젝트를 찾고 있지만 아직 삭제되지 않은 경우,

레일스 콘솔 세션 시작하고 다음을 실행하세요:

projects = Project.where(pending_delete: true)
projects.each do |p|
  puts "프로젝트 ID: #{p.id}"
  puts "프로젝트 이름: #{p.name}"
  puts "리포지토리 경로: #{p.repository.full_path}"
end

콘솔을 사용하여 프로젝트 삭제

프로젝트를 삭제할 수 없는 경우, Rails console에서 삭제를 시도할 수 있습니다.

경고:
데이터를 변경하는 명령은 올바르게 실행되지 않거나 적절한 조건에서 실행되지 않으면 손상을 유발할 수 있습니다.

항상 먼저 테스트 환경에서 명령을 실행하고, 복구할 수 있는 백업 인스턴스를 준비하세요.

project = Project.find_by_full_path('<project_path>')
user = User.find_by_username('<username>')
ProjectDestroyWorker.new.perform(project.id, user.id, {})

이렇게 해도 실패하면 다음을 사용하여 작동하지 않는 이유를 표시합니다:

project = Project.find_by_full_path('<project_path>')
project.delete_error

그룹 내 모든 프로젝트에 대한 기능 전환

프로젝트에서 기능을 전환하는 것은 projects API로 수행할 수 있지만,

대량의 프로젝트에 대해 이 작업을 수행해야 할 수 있습니다.

특정 기능을 전환하려면 Rails console session을 시작하고 다음 기능을 실행합니다:

경고:
데이터를 변경하는 명령은 올바르게 실행되지 않거나 적절한 조건에서 실행되지 않으면 손상을 유발할 수 있습니다.

항상 먼저 테스트 환경에서 명령을 실행하고, 복구할 수 있는 백업 인스턴스를 준비하세요.

projects = Group.find_by_name('_group_name').projects
projects.each do |p|
  ## <feature-name>을 모든 인스턴스에서 적절한 기능 이름으로 교체
  state = p.<feature-name>

  if state != 0
    puts "#{p.name}은 이미 <feature-name>이 활성화되어 있습니다. 건너뜁니다..."
  else
    puts "#{p.name}은 <feature-name>이 활성화되지 않았습니다. 활성화합니다..."
    p.project_feature.update!(<feature-name>: ProjectFeature::PRIVATE)
  end
end

전환할 수 있는 기능을 찾으려면 pp p.project_feature를 실행하세요.

사용 가능한 권한 수준은 concerns/featurable.rb에 나열되어 있습니다.