如果你重新构建了应用程序,那么在容器中所做的更改就丢失了。也许在你进行操作时,Backblaze 的工作人员修复了问题。
我刚刚注释掉了 S3 并重新构建。我想我以后还是会坚持使用本地存储。
本地存储工作正常。只是删除不起作用。
感谢您发帖并确认目前没有不降级 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团队能尽快提供一个更永久的兼容性修复方案。
希望您不需要这样做,但可以将该 sed 命令放入 app.yml 中,以便在重建时自动执行。我认为将其放在插件克隆的下方即可。但这可能比我想象的要复杂。
您好 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 中。
注意到此页面 - S3-Compatible API - 不再列出各种 checksum-* 标头不受支持。
@PatPatterson 不确定您是否还在该主题中 - 但是否已正式支持这些?
您能确认您的 backblaze b2 在没有我建议的修复的情况下是否正常工作吗?
感谢您的快速回复,抱歉——我本应提供更多细节。在另一个开源软件包(Mastodon)中,我们也曾将 aws-sdk-core gem 锁定在 < 3.216.0 以处理那些使用 Backblaze(我怀疑还有其他服务,但问题是在那里出现的)的用户遇到的确切问题。
但在最近几周,我注意到:
- Backblaze 网站上的那个页面不再将那些标头列为不支持。
- 最近的一个 aws gem 版本提到了修复了之前
when_required未完全遵守的问题。
在之前的研究中,我曾看到这个帖子,其中遇到的问题大致相同,我想了解的是,如果 Backblaze 确实增加了支持,或者 gem 现在已完全解决了该问题,我们是否可以安全地进行 gem 更新。
您好 - 是的,Backblaze B2 今年早些时候增加了对校验和标头的官方支持。
太好了!感谢您的确认。