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

**URL:** https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217
**Category:** Self-hosting
**Created:** [2025 年2 月 24 日 17:39 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217 "2025-02-24T17:39:21Z")
**Posts on this page:** 20
**Page:** 2

<div class="post-metadata">

### 作者： ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### 发布日期： [2025 年2 月 25 日 15:53 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/21 "2025-02-25T15:53:04Z")

</div>

AWS SDK 维护者破坏了兼容性。您的 S3 克隆提供商需要加快速度并实施更好的兼容性，以便您可以删除变通方法。

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 25 日 16:03 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/22 "2025-02-25T16:03:05Z")

</div>

仅此而已，这只影响 assets 目录中的 JS/map/CSS 文件，不会影响上传，对吧？  
我的意思是，它会影响清除孤立文件吗？

顺便提一下，我猜这个问题可能会影响从管理面板升级 Discourse？  
实际上，我通过管理面板升级失败了，这也是我进行重建的原因。

---

<div class="post-metadata">

### 作者： ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### 发布日期： [2025 年2 月 25 日 17:50 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/23 "2025-02-25T17:50:24Z")

</div>

> [@Yt.w](#):
>
> 只是为了澄清，这只会影响 assets 中的 JS/map/CSS 文件，而不会影响上传，对吗？

是的，它仅用于 assets。

> [@Yt.w](#):
>
> 我的意思是，它会影响清除孤立文件吗？

这个 rake 任务？不会。

但整个 AWS SDK 的更改也可能破坏了非兼容克隆上的人的功能。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2025 年2 月 25 日 17:50 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/24 "2025-02-25T17:50:35Z")

</div>

> [@Yt.w](#):
>
> 而且不会影响上传，对吧？

我很确定那是错的。所以我们可能也需要关闭“清理上传”。但这只会导致你在运行时出错。它不会导致你无法重建。

> [@Falco](#):
>
> 但整个 AWS SDK 的更改也可能破坏了不兼容克隆上的人员。

听起来很可能。也许我们需要一个“skip\_s3\_delete”设置来解决这个问题，直到其他提供商赶上来？而且也许会自动为我们知道有问题的提供商设置它？

那个 rake 任务是过期资产被移除的唯一方式吗？

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 25 日 18:01 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/25 "2025-02-25T18:01:39Z")

</div>

我只是想知道，为什么不添加一个选项将资源保留在 Discourse 核心服务器上（我的意思是，不将它们存储在 S3 上）？

只要不影响上传或清理孤立文件的过程，这似乎是一个可行的解决方案。

---

<div class="post-metadata">

### 作者： ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### 发布日期： [2025 年2 月 25 日 18:02 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/26 "2025-02-25T18:02:18Z")

</div>

> [@pfaffman](#):
>
> 那个 rake 任务是删除过期资源的唯一方法吗？

是的。这也不是什么大事。普通网站偶尔更新一下不会有什么大的区别。

如果有人关心这些事情，他们可以自己设置生命周期规则。

> [@pfaffman](#):
>
> 听起来很可能。也许我们需要一个“skip\_s3\_delete”设置来解决这个问题，直到其他提供商赶上来？

设置 `clean up uploads = false` 不是已经这样了吗？

> [@pfaffman](#):
>
> 也许还可以自动为我们知道有问题的提供商设置它？

哈哈，不行。Discourse 官方支持 S3。虽然我特意开始编写了整个[为上传配置 S3 兼容对象存储提供商](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916)维基，并添加了一些开关以增加克隆兼容性，但我们今天没有任何计划投入更多时间。

如果社区想发送一些增加兼容性的 PR，并且默认关闭，那是 #pr-welcome，但不要指望很快在核心中看到对每个克隆的官方支持。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2025 年2 月 25 日 18:09 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/27 "2025-02-25T18:09:43Z")

</div>

FWIW，看起来 Digital Ocean 在删除备份和过期缺失资产方面没有遇到任何问题。

对于出现故障的服务商，不需要的资产在造成很大问题之前需要很长时间。如果需要付费存储，保留大量备份（包括巨大的数据库和所有上传内容）可能会带来很大问题。

---

<div class="post-metadata">

### 作者： ![PatPatterson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/patpatterson/32/445451_2.png) [@PatPatterson](https://meta.discourse.org/u/PatPatterson)
#### 发布日期： [2025 年2 月 25 日 23:19 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/28 "2025-02-25T23:19:39Z")

</div>

您好 - 我是 Pat Patterson，Backblaze 的首席技术布道师；我之所以来到这个帖子，是因为我有一个自托管的 Discourse 论坛概念验证，并且在今天配置我的论坛使用 Backblaze B2 进行备份和上传时，恰好遇到了这个问题。

将 `AWS_REQUEST_CHECKSUM_CALCULATION` 和 `AWS_RESPONSE_CHECKSUM_CALCULATION` 设置为 `WHEN_REQUIRED` 是上传和下载文件的基本情况的一个有用的解决方法，但需要知道的是，它并不涵盖许多场景，包括：

- 删除文件 - Discourse 使用 `DeleteObjects` S3 操作一次 API 调用删除多个文件，这是正确的做法。
- 上传对象锁定启用的存储桶中的文件。

问题在于，这些操作需要（而不仅仅是支持）一个校验和（`Content-MD5` 标头或新的校验和标头之一），这会导致当前的 AWS SDK 提供新的校验和标头。据我所知，没有办法覆盖这一点，让 SDK 提供像以前一样的 `Content-MD5`。

我们的工程师正在努力解决所有这些问题；在此期间，最好的缓解方法是使用 `aws-sdk-s3` gem 的版本 `1.177.0` 或更早版本。

我尝试通过编辑 Gemfile 并将以下内容替换为：

```ruby
gem "aws-sdk-s3", require: false
gem "aws-sdk-sns", require: false

```

替换为：

```ruby
gem "aws-sdk-core", "~> 3.215.1", require: false
gem "aws-sdk-kms", "~> 1.96.0", require: false
gem "aws-sdk-s3", "~> 1.177.0", require: false
gem "aws-sdk-sns", "~> 1.92.0", require: false

```

但我对 `bundle` 的掌握不够好，只成功地通过以下错误破坏了我的部署：

```plaintext
/var/www/discourse/config/initializers/100-sidekiq.rb:69:in `<main>': undefined method `logger=' for module Sidekiq (NoMethodError)

  Sidekiq.logger = Logger.new(nil)
         ^^^^^^^^^
	from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/engine.rb:689:in `load'
	from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/engine.rb:689:in `block in load_config_initializer'
...

```

我猜我错过了一些重要的步骤。

> [@pfaffman](#):
>
> 就我所知，Digital Ocean 在删除备份和过期丢失的资产方面似乎没有任何问题。

我不希望给我们在 DO 的朋友泼冷水，他们是通过更新他们的服务来做到这一点的，即简单地忽略新的校验和标头，而不是因为不支持的校验和而拒绝 API 调用。

[他们的事件报告](https://status.digitalocean.com/incidents/zbrpd3j7hrrd) 说：

> 请注意，Spaces 目前不验证 AWS CLI 和 AWS SDK 在上传请求中发送的数据完整性校验和。

我们认为简单地接受和存储可能与 API 客户端提供的校验和不匹配的数据是不好的。

---

<div class="post-metadata">

### 作者： ![Andrew\_Rowe](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/andrew_rowe/32/445877_2.png) [@Andrew\_Rowe](https://meta.discourse.org/u/Andrew_Rowe)
#### 发布日期： [2025 年2 月 26 日 02:08 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/29 "2025-02-26T02:08:18Z")

</div>

> [@PatPatterson](#):
>
> 我是 Pat Patterson，Backblaze 的首席技术布道师

感谢发帖！

---

<div class="post-metadata">

### 作者： ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### 发布日期： [2025 年2 月 26 日 03:27 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/30 "2025-02-26T03:27:28Z")

</div>

> [@PatPatterson](#):
>
> 但了解它不包括一些场景很有帮助，包括：
> 
> - 删除文件 - Discourse 正在使用 `DeleteObjects` S3 操作一次 API 调用删除多个文件，这正是它应该做的。

是的，AWS SDK 的维护者对此不予理睬

> <https://github.com/aws/aws-sdk-js-v3/issues/6819#issuecomment-2625426822>
>
> \### Checkboxes for prior research
> 
> \- \[x\] I've gone through \[Developer Guide\](htt…ps://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide) and \[API reference\](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest)
> \- \[x\] I've checked \[AWS Forums\](https://forums.aws.amazon.com) and \[StackOverflow\](https://stackoverflow.com/questions/tagged/aws-sdk-js).
> \- \[x\] I've searched for \[previous similar issues\](https://github.com/aws/aws-sdk-js-v3/issues) and didn't find any solution.
> 
> \### Describe the bug
> 
> s3.deleteObjects sends CRC32 checksum even if \`requestChecksumCalculation\` is set to \`WHEN\_REQUIRED\`
> 
> \### Regression Issue
> 
> \- \[x\] Select this option if this issue appears to be a regression.
> 
> \### SDK version number
> 
> @aws-sdk/client-s3@2.729.0
> 
> \### Which JavaScript Runtime is this issue in?
> 
> Node.js
> 
> \### Details of the browser/Node.js/ReactNative version
> 
> All
> 
> \### Reproduction Steps
> 
> \`\`\`js
> import { S3 } from "@aws-sdk/client-s3";
> import { NodeHttpHandler } from "@smithy/node-http-handler";
> 
> class CustomHandler extends NodeHttpHandler {
> constructor() {
> super();
> }
> 
> printChecksumHeaders(prefix, headers) {
> for (const \[header, value\] of Object.entries(headers)) {
> if (
> header === "content-md5" ||
> header.startsWith("x-amz-checksum-") ||
> header.startsWith("x-amz-sdk-checksum-")
> ) {
> console.log(\`${prefix}\['${header}'\]: '${value}'\`);
> }
> }
> }
> 
> async handle(request, options) {
> this.printChecksumHeaders("request", request.headers);
> const response = await super.handle(request, options);
> this.printChecksumHeaders("response", response.response.headers);
> return response;
> }
> }
> 
> const client = new S3({
> requestHandler: new CustomHandler(),
> requestChecksumCalculation: "WHEN\_REQUIRED",
> });
> 
> const Bucket = "test-flexible-checksums-v2"; // Update to your test bucket name.
> 
> const prepareClient = new S3();
> // Populate an object in the bucket, as deleteObjects requires at least one.
> await prepareClient.putObject({ Bucket, Key: "helloworld.txt", Body: "helloworld" });
> 
> // Get list of objects to delete.
> const response = await prepareClient.listObjectsV2({ Bucket });
> const Objects = response.Contents.map(({ Key }) =\> ({ Key }));
> 
> await client.deleteObjects({ Bucket, Delete: { Objects } });
> \`\`\`
> 
> \### Observed Behavior
> 
> The CRC32 checksum is sent even if \`requestChecksumCalculation\` is set to \`WHEN\_REQUIRED\`
> 
> \`\`\`console
> $ node test.mjs
> request\['x-amz-sdk-checksum-algorithm'\]: 'CRC32'
> request\['x-amz-checksum-crc32'\]: 'uDrkBQ=='
> \`\`\`
> 
> \### Expected Behavior
> 
> When \`requestChecksumCalculation\` is set to \`WHEN\_REQUIRED\`, should it send \`md5\` like it was done in \`\<=v3.729.0\`?
> 
> Example output in \`v3.726.0\`
> \`\`\`console
> $ node test.mjs
> request\['content-md5'\]: 'rl/UEqX25ygZIHP8TWK6/g=='
> \`\`\`
> 
> \### Possible Solution
> 
> \_No response\_
> 
> \### Additional Information/Context
> 
> \_No response\_

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 26 日 12:07 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/31 "2025-02-26T12:07:02Z")

</div>

很高兴看到 B2 团队也注意到了这个问题。

这是我的临时解决方案：  
我注释掉了 `app.yml` 中所有与 S3 相关的配置，并成功重新构建了 Discourse。这不会影响我网站上先前上传文件的访问，在此期间上传的任何附件都将存储在本地，不会引起任何问题。

顺便说一句，我仍然想知道，为什么不添加一个选项将资产保留在 Discourse 核心服务器上（我的意思是，不将其存储在 S3 上）？

---

<div class="post-metadata">

### 作者： ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### 发布日期： [2025 年2 月 26 日 13:44 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/32 "2025-02-26T13:44:21Z")

</div>

> [@Yt.w](#):
>
> 顺便说一句，我仍然想知道，为什么不添加一个选项将资源保留在 Discourse 核心服务器上（我的意思是，不将它们存储在 S3 上）？

？？？

Discourse 开箱即用就是这样工作的，你需要明确选择将资源发送到对象存储服务。

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 26 日 14:00 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/33 "2025-02-26T14:00:16Z")

</div>

我的意思是，将 Discourse 核心资产（JS、CSS 等）保留在本地服务器上可能是一个不错的选择。同时，只有用户上传的文件才会存储在 S3 中。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2025 年2 月 26 日 14:43 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/34 "2025-02-26T14:43:01Z")

</div>

您可以通过不启用“use\_s3”来做到这一点，但它们很小，我建议直接推送它们，不用担心浪费空间。

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 26 日 15:01 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/35 "2025-02-26T15:01:36Z")

</div>

请帮我正确理解一下。  
您的意思是将 `app.yml` 中的 `DISCOURSE_USE_S3` 设置为 `false` 吗？

我想这样做，因为我的 Discourse 服务器在亚洲，而 B2 只有美国的服务器。

另外，这次 AWS SDK 的问题与资产管理有关，对吗？  
所以，如果我将资产存储在本地服务器上，也许可以避免这个问题（如果我理解得没错的话）。

---

<div class="post-metadata">

### 作者： ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### 发布日期： [2025 年2 月 26 日 15:54 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/36 "2025-02-26T15:54:47Z")

</div>

问题与 **删除** S3 中的资产有关。如果您只删除尝试删除未使用的资产的那一行，它现在就可以工作。而且听起来问题很快就会得到解决。这是最简单的解决方案。我推荐它。这是我最好的免费答案。

---

<div class="post-metadata">

### 作者： ![Yt.w](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yt.w/32/348367_2.png) [@Yt.w](https://meta.discourse.org/u/Yt.w)
#### 发布日期： [2025 年2 月 26 日 16:03 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/37 "2025-02-26T16:03:11Z")

</div>

谢谢，这对我很有帮助！

---

<div class="post-metadata">

### 作者： ![PatPatterson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/patpatterson/32/445451_2.png) [@PatPatterson](https://meta.discourse.org/u/PatPatterson)
#### 发布日期： [2025 年2 月 26 日 18:53 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/38 "2025-02-26T18:53:49Z")

</div>

> [@Falco](#):
>
> > [@PatPatterson](#):
> >
> > 但了解它不包括许多场景很有帮助，包括：
> > 
> > - 删除文件 - Discourse 正在使用 `DeleteObjects` S3 操作以单个 API 调用删除多个文件，正如它应该做的那样。
> 
> 是的，AWS SDK 的维护者对此置之不理  
> [s3.deleteObjects sends CRC32 checksum even if `requestChecksumCalculation` is set to `WHEN_REQUIRED` · Issue #6819 · aws/aws-sdk-js-v3 · GitHub](https://github.com/aws/aws-sdk-js-v3/issues/6819#issuecomment-2625426822)

这是因为，在 S3 API 定义中，[DeleteObjects 操作](https://github.com/aws/aws-sdk-ruby/blob/877b459c03ce053a2e311d3d6873ce1b210180a5/apis/s3/2006-03-01/api-2.json#L314) 的 [`httpChecksum.requestChecksumRequired`](https://github.com/aws/aws-sdk-ruby/blob/877b459c03ce053a2e311d3d6873ce1b210180a5/apis/s3/2006-03-01/api-2.json#L326) 设置为 `true`，而 [PutObject](https://github.com/aws/aws-sdk-ruby/blob/877b459c03ce053a2e311d3d6873ce1b210180a5/apis/s3/2006-03-01/api-2.json#L1178) 则将其设置为 `false`。因此，SDK 遵守 `WHEN_REQUIRED`，因为校验和是必需的。

所有 AWS SDK 现在都从 API 定义生成，只有极少的额外代码来处理边缘情况。代码会看到 `DeleteObjects` 需要校验和，而现在执行此操作的方法是使用新的校验和之一，而不是 `Content-MD5`。

不幸的是，AWS 并未提供“像以前一样使用 `Content-MD5`”的配置。在进行此类更改时，他们通常不会考虑第三方对象存储生态系统，因为他们实际上不需要这样做。只有当这些更改意外地在某个角落案例中损坏了他们自己的服务时，才会修复这些问题。

---

<div class="post-metadata">

### 作者： ![PatPatterson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/patpatterson/32/445451_2.png) [@PatPatterson](https://meta.discourse.org/u/PatPatterson)
#### 发布日期： [2025 年2 月 26 日 18:57 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/39 "2025-02-26T18:57:16Z")

</div>

> [@Yt.w](#):
>
> B2 只有美国的服务器

这对亚洲的用户来说可能没什么帮助，但我们也在欧洲（荷兰阿姆斯特丹）以及今年年初在加拿大（多伦多）设有数据中心。

我无法做出任何承诺，但我们肯定在考虑在亚洲设立一个地点。

另外，如果您使用 CDN，源服务器的位置关系不大。

---

<div class="post-metadata">

### 作者： ![AntiMetaman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/antimetaman/32/186978_2.png) [@AntiMetaman](https://meta.discourse.org/u/AntiMetaman)
#### 发布日期： [2025 年3 月 1 日 05:45 UTC](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217/40 "2025-03-01T05:45:26Z")

</div>

你说得对！

Backblaze **不支持** `x-amz-checksum-crc32`，而 Discourse 较新版本的 AWS SDK 可能默认启用了此功能。

所以我进入了应用：

> ./launcher enter app

并卸载了当前版本的 AWS SDK：

> gem uninstall aws-sdk-s3 aws-sdk-core aws-sdk-kms

然后安装了 Backblaze 技术人员说可以工作的版本：

> gem install aws-sdk-core -v “~\> 3.215.1”  
> gem install aws-sdk-kms -v “~\> 1.96.0”  
> gem install aws-sdk-s3 -v “~\> 1.177.0”

然后我重建了应用，它成功了！

[上一页](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217.md?page=1)

[下一页](https://meta.discourse.org/t/cant-rebuild-due-to-aws-sdk-gem-bump-and-new-aws-data-integrity-protections/354217.md?page=3)
