- RPM ‘软件包已安装’ 错误
- 访问项目存储库设置时的 500 错误
- 日志中出现
PG::UndefinedColumn: ERROR:..
消息的 500 错误 - 错误:无法连接到内部极狐GitLab API
- 签名验证期间发生错误
Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] 命令在 3600s 后超时
- 缺少资产文件
- ActiveRecord::LockWaitTimeout 错误,重试后睡眠
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
为了帮助解决故障,运行以下命令。
sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true
有关更多信息:
- 使用
gitlab-ctl
进行维护,请参见 维护命令。 - 使用
gitlab-rake
进行配置检查,请参见 检查极狐GitLab 配置。
RPM ‘软件包已安装’ 错误
如果您使用 RPM 并且正在从极狐GitLab 基础版升级到极狐GitLab 企业版,您可能会收到类似以下的错误:
package gitlab-7.5.2_omnibus.5.2.1.ci-1.el7.x86_64 (which is newer than gitlab-7.5.2_jh.omnibus.5.2.1.ci-1.el7.x86_64) is already installed
您可以使用 --oldpackage
选项覆盖此版本检查:
sudo rpm -Uvh --oldpackage gitlab-7.5.2_jh.omnibus.5.2.1.ci-1.el7.x86_64.rpm
访问项目存储库设置时的 500 错误
当极狐GitLab 从基础版 (CE) 转换为企业版 (EE),然后再转换为 CE,然后再回到 EE 时,会出现此错误。
查看项目的存储库设置时,您可以在日志中看到此错误:
Processing by Projects::Settings::RepositoryController#show as HTML
Parameters: {"namespace_id"=>"<namespace_id>", "project_id"=>"<project_id>"}
Completed 500 Internal Server Error in 62ms (ActiveRecord: 4.7ms | Elasticsearch: 0.0ms | Allocations: 14583)
NoMethodError (undefined method `commit_message_negative_regex' for #<PushRule:0x00007fbddf4229b8>
Did you mean? commit_message_regex_change):
此错误是由于在最初迁移到 EE 时,将 EE 功能添加到 CE 实例引起的。在实例迁移回 CE 并再次升级到 EE 后,数据库中已存在 push_rules
表。因此,迁移无法添加 commit_message_regex_change
列。
这导致 EE 表的回迁 迁移无法正确工作。回迁迁移假定在运行 CE 时数据库中不存在某些表。
为了解决此问题:
-
启动数据库控制台:
sudo gitlab-rails dbconsole --database main
-
手动添加缺失的
commit_message_negative_regex
列:ALTER TABLE push_rules ADD COLUMN commit_message_negative_regex VARCHAR; # 退出 psql \q
-
重启极狐GitLab:
sudo gitlab-ctl restart
日志中出现 PG::UndefinedColumn: ERROR:..
消息的 500 错误
升级后,如果您开始在日志中看到类似 PG::UndefinedColumn: ERROR:...
的 500
错误,这些错误可能是由于以下原因引起的:
- 数据库迁移 尚未完成。等待迁移完成。
- 数据库迁移已完成,但极狐GitLab 需要加载新架构。要加载新架构,重启极狐GitLab。
错误:无法连接到内部极狐GitLab API
如果您在单独的极狐GitLab Pages 服务器上收到 无法连接到内部极狐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] [..] 命令在 3600s 后超时
如果数据库架构和数据更改(数据库迁移)必须运行超过一小时,则升级会失败,并出现 超时
错误:
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
缺少资产文件
升级后,极狐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-jh
-
对于 Red Hat/SUSE (RPM) 发行版:
rpm -V gitlab-jh
要重新安装软件包以修复不完整的安装:
-
检查已安装的版本:
-
对于 Debian 发行版:
apt --installed list gitlab-jh
-
对于 Red Hat/SUSE (RPM) 发行版:
rpm -qa gitlab-jh
-
-
重新安装软件包,指定已安装的版本。例如 14.4.0 企业版:
-
对于 Debian 发行版:
apt-get install --reinstall gitlab-jh=14.4.0-jh.0
-
对于 Red Hat/SUSE (RPM) 发行版:
yum reinstall gitlab-jh-14.4.0
-
禁用 NGINX Gzip 支持
检查是否禁用了 nginx['gzip_enabled']
:
grep gzip /etc/gitlab/gitlab.rb
ActiveRecord::LockWaitTimeout 错误,重试后睡眠
在极少数情况下,Sidekiq 繁忙并锁定迁移尝试更改的表。为了解决此问题:
- 将极狐GitLab 置于只读模式。
-
停止 Sidekiq:
gitlab-ctl stop sidekiq