- 获取极狐GitLab 实例的状态
- RPM 软件包已安装错误
- 日志中出现
PG::UndefinedColumn: ERROR:..
错误的 500 错误 - 错误:无法连接到内部极狐GitLab API
- 在签名验证期间发生错误
Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] Command timed out after 3600s
- 丢失 asset 文件
- ActiveRecord::LockWaitTimeout 错误,休眠后重试
故障排查
获取极狐GitLab 实例的状态
sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true
RPM 软件包已安装错误
如果您正在使用 RPM 并且您正在进行升级,您可能会得到如下错误:
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
日志中出现 PG::UndefinedColumn: ERROR:..
错误的 500 错误
升级后,如果您开始在日志中收到 500
错误,显示的消息类似于 PG::UndefinedColumn: ERROR:...
,这些错误可能由以下原因引起:
- 数据库迁移尚未完成。等待迁移完成。
- 数据库迁移已完成,但极狐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
如果数据库模式和数据更改(数据库迁移)必须在 1 小时内运行,升级将因 time 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
此命令可能需要很长时间才能完成。使用
screen
或其他机制确保程序不会被中断,如果您的 SSH 会话中断。 -
完成升级
sudo gitlab-ctl reconfigure
-
热重载
puma
和sidekiq
服务:sudo gitlab-ctl hup puma sudo gitlab-ctl restart sidekiq
丢失 asset 文件
升级过程中,极狐GitLab 可能无法正确地提供图像、JavaScript 和样式表等资产。这可能会生成 500 错误,或者 Web UI 可能无法正确呈现。
在大规模的极狐GitLab 环境上,如果负载均衡器后面的 Web 服务器之一显示此问题,则问题会间歇性地发生。
用于重新编译 assets 的 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
重复的 sprockets 文件
编译后的 asset 文件在每个版本中都有唯一的文件名称。 Sprockets 文件提供从应用程序代码中的文件名到唯一文件名的映射。
/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest*.json
请确保仅有一个 sprockets 文件。Rails 使用第一个文件。
可以用如下方式检查在 Omnibus 极狐GitLab 升级期间是否有重复的 sprockets 文件 在运行:
GitLab discovered stale file(s) from the previous install that need to be cleaned up.
The following files need to be removed:
/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-jh
-
对 Red Hat (RPM) 发行版:
rpm -V gitlab-jh
要重装来解决不完整安装问题:
-
检查安装的版本:
-
对 Debian 发行版:
apt --installed list gitlab-ee
-
对 Red Hat (RPM) 发行版:
rpm -qa gitlab-ee
-
-
重装软件包,指定已安装的版本。例如 16.9.0:
-
对 Debian 发行版:
apt-get install --reinstall gitlab-jh=16.9.0
-
对 Red Hat (RPM) 发行版:
yum reinstall gitlab-jh-16.9.0
-
NGINX Gzip 支持
检查是否已启用 nginx['gzip_enabled']
:
grep gzip /etc/gitlab/gitlab.rb
这可能会阻止一些 assets 来提供服务。