故障排除:包安装
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed
为帮助故障排除,请运行以下命令。
sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true有关更多信息,请参阅:
- 使用
gitlab-ctl进行维护,请参阅 维护命令。 - 使用
gitlab-rake进行配置检查,请参阅 检查 GitLab 配置。
日志中出现带有 PG::UndefinedColumn: ERROR:.. 消息的 500 错误
升级后,如果日志中出现显示类似 PG::UndefinedColumn: ERROR:... 消息的 500 错误,
这些错误可能由以下原因导致:
错误:无法连接到内部 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 updateMixlib::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:要修复此错误:
-
运行剩余的数据库迁移:
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
- 样式表
GitLab 可能生成 500 错误,或者 Web UI 可能无法正确渲染。
在扩展的 GitLab 环境中,如果负载均衡器后面的一个 Web 服务器出现此问题, 问题会间歇性发生。
重新编译资源的 Rake 任务
不适用于 Linux 包安装,因为后者从 /opt/gitlab/embedded/service/gitlab-rails/public/assets
提供预编译的资源文件。
以下部分概述了可能的原因和解决方案。
旧进程
旧进程最可能的原因是旧的 Puma 进程正在运行。旧的 Puma 进程可能指示客户端 请求来自 GitLab 之前版本的资源文件。由于这些文件不再存在,将返回 HTTP 404 错误。
重启是确保这些旧的 Puma 进程不再运行的最佳方法。或者,您可以:
-
停止 Puma:
gitlab-ctl stop puma -
检查是否还有剩余的 Puma 进程,并终止它们:
ps -ef | egrep 'puma[: ]' kill <processid> -
使用
ps验证 Puma 进程已停止运行。 -
启动 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
要重新安装软件包以修复不完整的安装:
-
检查已安装的版本:
-
对于 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这可能会阻止某些资源文件的提供服务。 相关问题中了解更多信息。
ActiveRecord::LockWaitTimeout 错误,休眠后重试
在极少数情况下,Sidekiq 正在忙于锁定迁移尝试更改的表。要解决此问题:
-
将 GitLab 设置为只读模式。
-
停止 Sidekiq:
gitlab-ctl stop sidekiq
GPG 签名验证错误:错误的 GPG 签名
在运行 yum update 或 dnf update 时,您可能会收到以下错误:
Error: Failed to download metadata for repo 'gitlab_gitlab-ee-source': repomd.xml GPG signature verification error: Bad GPG signature要解决此问题:
- 运行
dnf clean all。 - 获取最新的签名密钥。
- 尝试再次升级。
如果在 dnf clean all 后错误仍然存在,请手动删除受影响的存储库缓存目录。在此示例中:
- 删除
/var/cache/dnf/gitlab_gitlab-ee-source。 - 运行
dnf makecache。