由于AWS SDK gem版本升级和新的AWS数据完整性保护,无法重建

如果你重新构建了应用程序,那么在容器中所做的更改就丢失了。也许在你进行操作时,Backblaze 的工作人员修复了问题。

1 个赞

我刚刚注释掉了 S3 并重新构建。我想我以后还是会坚持使用本地存储。

1 个赞

本地存储工作正常。只是删除不起作用。

感谢您发帖并确认目前没有不降级 aws SDK 的解决方法。我在另一个使用 golang aws sdk 的项目中遇到了 b2 s3 api 的问题,该项目试图备份 VictoriaMetrics 数据库。

您是否从您的工程团队那里了解到他们将如何或何时解决此问题,或者是否有任何方法可以跟踪/获取有关支持的解决方法的更新?我正在考虑是分叉并重新编译一个项目以更改依赖项,还是只等一段时间等待更新!

谢谢!

以下是我用来降级AWS Gems的操作步骤:

 # 进入容器:
./launcher enter app
# 显然需要解冻Gemfile.lock:
bundle config set frozen false
# 设置较旧版本的sdk-s3 gem:
sed -i 's/gem "aws-sdk-s3", require: false/gem "aws-sdk-s3", "1.177.0", require: false/' Gemfile
# 将S3 gem降级以匹配当前的Gemfile中的版本:
bundle update aws-sdk-s3
# 同样降级aws-sdk-core gem:
bundle add aws-sdk-core --version 3.215.

在进行这些更改后,我成功地将备份保存到了B2。我相信这只是一个临时解决方案,在下一次Discourse更新时会失效,所以我希望@PatPatterson 和Backblaze团队能尽快提供一个更永久的兼容性修复方案。

2 个赞

希望您不需要这样做,但可以将该 sed 命令放入 app.yml 中,以便在重建时自动执行。我认为将其放在插件克隆的下方即可。但这可能比我想象的要复杂。

1 个赞

您好 AntiMetaman,

我花了一周的时间尝试让 S3 存储的备份正常工作,并最终通过此线程解决了备份问题。老实说,我不确定是哪个部分起作用了。

我按照您卸载和安装 gem 的方法操作,但现在上传图片时出现错误。我的错误日志显示:

not entitled /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.219.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call’ /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aw

在我不得不彻底重装服务器并重新开始之前(老实说,此时我甚至不确定是否还想继续),您是否知道如何撤销 gem 的卸载和安装,以便我尝试查看这是否能解决问题?

我在我们的实例(使用Backblaze进行备份)上发现的行为是,备份在二月开始失败,没有通知。我只是今天偶然注意到这个问题,因为我会不时检查我们的备份。这我认为是一个相当严重的问题?

是否可以将AWS SDK降级,直到为Backblaze和其他非AWS提供商找到解决方案?

但我为一个使用 Backblaze 的网站这样做了。我创建了一个模板,放在 /root/aws-revert-template.yml,内容如下:

# This template reverts aws-sdk-s3 to a version that works with backblaze
# 这个模板将 aws-sdk-s3 回滚到一个可以与 backblaze 兼容的版本

params:
  home: /var/www/discourse

hooks:
  after_bundle_exec:
    - exec:
        cd: $home
        cmd:
          - 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

然后像这样将它添加到我的 app.yml 中:

# IMPORTANT: SET A SECRET PASSWORD in Postgres for the Discourse User
# 重要提示:为 Discourse 用户在 Postgres 中设置一个秘密密码
# TODO: change SOME_SECRET in this template
# TODO:在此模板中更改 SOME_SECRET

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
## 如果您想添加 Let's Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "/root/aws-revert-template.yml"

然后我运行了一个升级到 stable 的命令,似乎有效。

您也可以直接将模板中的内容添加到您的 app.yml 中。

3 个赞

注意到此页面 - S3-Compatible API - 不再列出各种 checksum-* 标头不受支持。

@PatPatterson 不确定您是否还在该主题中 - 但是否已正式支持这些?

2 个赞

您能确认您的 backblaze b2 在没有我建议的修复的情况下是否正常工作吗?

感谢您的快速回复,抱歉——我本应提供更多细节。在另一个开源软件包(Mastodon)中,我们也曾将 aws-sdk-core gem 锁定在 < 3.216.0 以处理那些使用 Backblaze(我怀疑还有其他服务,但问题是在那里出现的)的用户遇到的确切问题。

但在最近几周,我注意到:

  • Backblaze 网站上的那个页面不再将那些标头列为不支持。
  • 最近的一个 aws gem 版本提到了修复了之前 when_required 未完全遵守的问题。

在之前的研究中,我曾看到这个帖子,其中遇到的问题大致相同,我想了解的是,如果 Backblaze 确实增加了支持,或者 gem 现在已完全解决了该问题,我们是否可以安全地进行 gem 更新。

2 个赞

您好 - 是的,Backblaze B2 今年早些时候增加了对校验和标头的官方支持。

2 个赞

太好了!感谢您的确认。