项目的故障排查

当您使用项目时,您可能会遇到以下问题,或者需要使用其他方法来完成特定任务。

An error occurred while fetching commit data

当您访问某个项目时,如果您的浏览器使用了广告拦截器,可能会显示消息 An error occurred while fetching commit data。解决方案是禁用您尝试访问的极狐GitLab 实例的广告拦截器。

使用 SQL 查询找到项目

当您在 Rails 控制台会话中时,您可以根据 SQL 查询找到并存储项目数组:

# Finds projects that end with '%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 中反映出来,您可能需要清除项目的或仓库的缓存。您可以通过 Rails 控制台会话和以下之一的方式来完成:

caution 修改数据的命令如果运行不正确或在不正确的条件下运行时会造成损害。在运行命令之前,请先在测试环境中运行,并准备好备份实例以恢复。
## Clear project cache
ProjectCacheWorker.perform_async(project.id)

## Clear repository .exists? cache
project.repository.expire_exists_cache

查找待删除的项目

如果您想找到所有被标记为删除但尚未被删除的项目,请启动 Rails 控制台会话并运行以下命令:

projects = Project.where(pending_delete: true)
projects.each do |p|
  puts "Project ID: #{p.id}"
  puts "Project name: #{p.name}"
  puts "Repository path: #{p.repository.full_path}"
end

使用控制台删除项目

如果项目无法被删除,您可以尝试通过 Rails 控制台删除它。

caution 修改数据的命令如果运行不正确或在不正确的条件下运行时会造成损害。在运行命令之前,请先在测试环境中运行,并准备好备份实例以恢复。
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

在群组中为所有项目切换功能

当在项目中打开功能时,您可以通过 项目 API 来完成,但您可能需要为大量项目来完成此操作。

要打开特定的功能,您可以启动 Rails 控制台会话并运行以下函数:

caution 修改数据的命令如果运行不正确或在不正确的条件下运行时会造成损害。在运行命令之前,请先在测试环境中运行,并准备好备份实例以恢复。
projects = Group.find_by_name('_group_name').projects
projects.each do |p|
  ## replace <feature-name> with the appropriate feature name in all instances
  state = p.<feature-name>

  if state != 0
    puts "#{p.name} has <feature-name> already enabled. Skipping..."
  else
    puts "#{p.name} didn't have <feature-name> enabled. Enabling..."
    p.project_feature.update!(<feature-name>: ProjectFeature::PRIVATE)
  end
end

要找到可以打开的功能,运行 pp p.project_feature。可用的权限级别在 concerns/featurable.rb 中列出。