因未初始化的 TransferManager 导致备份上传失败

对此的一点想法:像这样的临时兼容性模板,如果带有一些自过期/守卫条件,可能会更安全,而不是一直无限期地覆盖 Discourse 的依赖项。

例如,对于临时的源代码回移(backports),我计划在生产环境中使用钩子,首先检查上游修复是否已经存在,仅在仍然需要时才应用补丁。

在这种情况下,类似以下内容的逻辑本可以防止旧的 aws-sdk-s3 1.177.0 版本锁定在 Discourse 自身开始依赖较新 SDK 功能后继续存在:

hooks:
  after_bundle_exec:
    - exec:
        cd: $home
        cmd:
          - |
            if grep -q "Aws::S3::TransferManager" lib/s3_helper.rb; then
              echo "Discourse 现在需要 Aws::S3::TransferManager;跳过已过时的 Backblaze aws-sdk-s3 降级"
            else
              echo "应用临时的 Backblaze aws-sdk-s3 兼容性版本锁定"
              bundle config set frozen false
              sed -i 's/gem "aws-sdk-s3", require: false/gem "aws-sdk-s3", "1.177.0", require: false/' Gemfile
              bundle update aws-sdk-s3
              bundle add aws-sdk-core --version 3.215
            fi

上述特定的检查仅作为示例——更通用的版本检查,或者当 Discourse 超过预期的 SDK 版本时显式失败,可能效果更好。

即使大声报错(failing loudly),也比静默生成一个 gem 版本与 Discourse 预期版本不匹配的容器要好。