{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

{{< /details >}}

为了帮助解决故障,运行以下命令。

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

有关更多信息:

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 时数据库中不存在某些表。

为了解决此问题:

  1. 启动数据库控制台:

    sudo gitlab-rails dbconsole --database main
    
  2. 手动添加缺失的 commit_message_negative_regex 列:

    ALTER TABLE push_rules ADD COLUMN commit_message_negative_regex VARCHAR;
    
    # 退出 psql
    \q
    
  3. 重启极狐GitLab:

    sudo gitlab-ctl restart
    

日志中出现 PG::UndefinedColumn: ERROR:.. 消息的 500 错误

升级后,如果您开始在日志中看到类似 PG::UndefinedColumn: ERROR:...500 错误,这些错误可能是由于以下原因引起的:

错误:无法连接到内部极狐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:

为了解决此错误:

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

    sudo gitlab-rake db:migrate
    

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

  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-jh
    
  • 对于 Red Hat/SUSE (RPM) 发行版:

    rpm -V gitlab-jh
    

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

  1. 检查已安装的版本:

    • 对于 Debian 发行版:

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

      rpm -qa gitlab-jh
      
  2. 重新安装软件包,指定已安装的版本。例如 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 繁忙并锁定迁移尝试更改的表。为了解决此问题:

  1. 将极狐GitLab 置于只读模式。
  2. 停止 Sidekiq:

    gitlab-ctl stop sidekiq