Help us learn about your current experience with the documentation. Take the survey.

故障排除:包安装

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed

为帮助故障排除,请运行以下命令。

sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true

有关更多信息,请参阅:

日志中出现带有 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 时收到此错误:

An error occurred during the signature verification

请使用以下命令更新 GitLab 包服务器的 GPG 密钥:

curl --silent "https://packages.gitlab.com/gpg.key" | apt-key add -
apt-get update

Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] Command timed out after 3600s

如果数据库架构和数据更改(数据库迁移)的运行时间必须超过一小时, 升级将出现 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:

要修复此错误:

  1. 运行剩余的数据库迁移:

    sudo gitlab-rake db:migrate

    此命令可能需要很长时间才能完成。如果您的 SSH 会话断开,请使用 screen 或其他机制确保程序不被中断。

  2. 完成升级:

    sudo gitlab-ctl reconfigure
  3. 热重载 pumasidekiq 服务:

    sudo gitlab-ctl hup puma
    sudo gitlab-ctl restart sidekiq

缺少资源文件

升级后,GitLab 可能无法正确提供资源文件,例如:

  • 图片
  • JavaScript
  • 样式表

GitLab 可能生成 500 错误,或者 Web UI 可能无法正确渲染。

在扩展的 GitLab 环境中,如果负载均衡器后面的一个 Web 服务器出现此问题, 问题会间歇性发生。

重新编译资源的 Rake 任务 不适用于 Linux 包安装,因为后者从 /opt/gitlab/embedded/service/gitlab-rails/public/assets 提供预编译的资源文件。

以下部分概述了可能的原因和解决方案。

旧进程

旧进程最可能的原因是旧的 Puma 进程正在运行。旧的 Puma 进程可能指示客户端 请求来自 GitLab 之前版本的资源文件。由于这些文件不再存在,将返回 HTTP 404 错误。

重启是确保这些旧的 Puma 进程不再运行的最佳方法。或者,您可以:

  1. 停止 Puma:

    gitlab-ctl stop puma
  2. 检查是否还有剩余的 Puma 进程,并终止它们:

    ps -ef | egrep 'puma[: ]'
    kill <processid>
  3. 使用 ps 验证 Puma 进程已停止运行。

  4. 启动 Puma

    gitlab-ctl start puma

重复的 sprockets 文件

编译的资源文件在每个版本中都有唯一的文件名。sprockets 文件 提供从应用程序代码中的文件名到唯一文件名的映射。

/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest*.json

确保只有一个 sprockets 文件。Rails 使用第一个文件

在 Linux 包升级期间会检查重复的 sprockets 文件:

GitLab 发现需要清理的先前安装的过时文件。
需要删除以下文件:

/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest-e16fdb7dd73cfdd64ed9c2cc0e35718a.json

解决此问题的选项包括:

  • 如果您有包升级的输出,请删除指定的文件。然后重启 Puma:

    gitlab-ctl restart puma
  • 如果您没有该消息,请重新安装以再次生成它。有关更多信息,请参阅 不完整的安装

  • 删除所有 sprockets 文件,然后按照 不完整的安装 的说明操作。

不完整的安装

不完整的安装可能是导致资源文件缺失问题的原因。

验证软件包以确定是否是此问题:

  • 对于 Debian 发行版:

    apt-get install debsums
    debsums -c gitlab-ee
  • 对于 Red Hat/SUSE (RPM) 发行版:

    rpm -V gitlab-ee

要重新安装软件包以修复不完整的安装:

  1. 检查已安装的版本:

    • 对于 Debian 发行版:

      apt --installed list gitlab-ee
    • 对于 Red Hat/SUSE (RPM) 发行版:

      rpm -qa gitlab-ee
  2. 重新安装软件包,指定已安装的版本。例如 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

这可能会阻止某些资源文件的提供服务。 相关问题中了解更多信息

ActiveRecord::LockWaitTimeout 错误,休眠后重试

在极少数情况下,Sidekiq 正在忙于锁定迁移尝试更改的表。要解决此问题:

  1. 将 GitLab 设置为只读模式。

  2. 停止 Sidekiq:

    gitlab-ctl stop sidekiq

GPG 签名验证错误:错误的 GPG 签名

在运行 yum updatednf update 时,您可能会收到以下错误:

Error: Failed to download metadata for repo 'gitlab_gitlab-ee-source': repomd.xml GPG signature verification error: Bad GPG signature

要解决此问题:

  1. 运行 dnf clean all
  2. 获取最新的签名密钥
  3. 尝试再次升级。

如果在 dnf clean all 后错误仍然存在,请手动删除受影响的存储库缓存目录。在此示例中:

  1. 删除 /var/cache/dnf/gitlab_gitlab-ee-source
  2. 运行 dnf makecache