[strapi]在发送方和接收方的不同媒体提供商之间导入、导出和传输复制数据

2024-05-13 401 views
7
错误报告 所需的系统信息
  • Node.js 版本:v18.14.2
  • NPM版本:9.3.1
  • 斯特拉皮版本:4.7.0
  • 数据库:mysql => psql
  • 操作系统:Linux => Heroku
  • 你的项目是Javascript还是Typescript:JS
描述错误

我正在尝试v4.7.0中引入的新传输功能(https://github.com/strapi/strapi/pull/15607)。在发送方,我的设置是 Strapi 4.7.0 的 mysql 数据库实例,具有本地文件支持。在接收端,我在 Heroku 中使用 postgres 和 Amazon AWS S3 存储桶运行 Strapi 4.7.0 实例。传输工作正常,控制台上没有报告任何问题。内容和文件都会传输,但文件不存储在 AWS 存储桶中,而是存储在本地。如果我在 Strapi 中更新文件,则传输后可以在 AWS 存储桶中找到更新的文件,但找不到原始文件。

重现行为的步骤
  1. 开始传输。

    NODE_ENV=production yarn strapi transfer --to https://***/admin --to-token ***

    绘图

  2. 在接收方,我可以看到所有文件并且可以下载所有文件 绘图

  3. AWS 存储桶为空(意外) 绘图

  4. Strapi 媒体库中接收端的替换文件将再次存储在 AWS 存储桶中。 (预期的) 绘图

预期行为

yarn transfer完成后,所有文件最终都会存储在 Amazon AWS S3 存储桶中。

回答

8

@Convly 您好 - 正如您在 #15607 中介绍的功能一样,我将您添加到这里。希望,这没问题。干杯,非常感谢。最大限度

8

目前我们已经意识到这一点,并且打算实现第三方上传提供商(基本上不包括本地),我们需要迭代该功能以启用对第三方上传提供商的支持。

抄送@marcoautiero

4

嗨@derrickmehaffy - 感谢您的快速回复。

@strapi/provider-upload-aws-s3也在使用 4.7.0 版本,从我的角度来看,这不是第三方工具,而是 Strapi 拥有的工具。

export此外,我可以通过和规避该错误import吗?

0

抱歉,我所说的第三方是非本地的,我不太清楚,但当前的传输功能目前不会将媒体发送到本地以外的任何提供商。这是我们已经意识到的事情,并计划在以后做。 DEITS 是我们正在快速迭代的第一个功能。

9

嘿,感谢您打开这个问题

正如 Derrick 正确地解释的那样,我们暂时不处理本地之外的任何上传提供商(请参阅:https ://docs.strapi.io/dev-docs/data-management/transfer ),因为它会推迟了该功能的发布(有关提供商“资产的幕后管理相当复杂”)。

我想我们可以把这个问题转化为功能请求,你觉得怎么样? :思维:

0

嗨@Convly – 我完全同意将其作为功能请求。

我认为该transfer命令使用普通的REST API进行数据传输,因为这会隐藏传输中数据库提供程序和媒体提供程序的所有复杂性。这意味着您可以保持单个模型(表)同步,从我的角度来看,这比复制所有内容或什么都不复制更有趣。通过importexport、 和的一对一复制transfer通常可以使用数据库和存储的标准复制技术来完成。由于能够内省模型,GraphQL API 还允许仅使用API

总而言之,Strapi 是一款出色的产品,我非常感谢您的工作。请原谅我不断升级的言论。

6

嘿@maxbraeutigam,感谢您分享您的观点!

不幸的是,传输功能无法使用 REST(或 GraphQL)内容 API:

  • 它不包括所有数据(例如自动删除密码和私有属性)
  • 它必须绕过路由细节,例如策略或自定义用户中间件
  • 它将受到数据创建或更新的清理操作的影响
  • 这意味着我们失去了通过 websocket API 传输数据的能力(=> 性能大幅下降)

为了给您提供更多背景信息,我们在功能开发之前进行一些研究时考虑过使用这些 API,但我们很快得出结论,我们需要一种新的数据传输方式来绕过所有 Strapi、用户和插件自定义逻辑。

希望它有助于澄清事情:slightly_smiling_face:

0

嗨@Convly——我很确定你做了作业。没有恶意。但新功能不适合我的工作流程(所以这可能是个人问题)。我假设有两个标准用例:

  1. 我需要一对一的副本:因此我使用现有基础设施的标准复制功能,例如pg_dumppg_restore
  2. 我需要从不同的 Strapi 安装中传输“精心挑选的”数据,例如一些模型:在理想的世界中,,,,步入import这里。exporttransfer

例如,可能需要第二个工作流程来开发具有不同插件、不同提供商、不同基础设施的新 Strapi 环境。为了运行transfer,我必须在源端安装无用的插件才能运行命令。在这种迁移场景中,我不太关心速度。

考虑到先决条件(仅本地文件、完全相同的模式、源和目标之间完全相同的插件),人们可能会问一个异端问题:与正常的dump,restorecp/相比有什么优势rsync

再说一次,这可能只是我的观点。再说一次,我非常欣赏你的工作,我喜欢 Strapi。 ❤️

6

@derrickmehaffy 是否可以让我们知道此功能的可能发布日期?

因为我们计划通过创建一个 GitHub 操作任务来克服此问题,以便在将数据从暂存 Strapi 实例传输到生产 Strapi 实例的 GitHub 操作之前将 s3 存储桶从暂存复制到生产市场。

假设我们不需要等待太久。我想我们会等待。如果核心团队不致力于此,我们非常乐意为支持 s3 提供商转移做出贡献。

3

我们目前正在开发一个传输拉取脚本,该脚本应该可以用于转换不同的媒体提供商(实际上现在正在测试它),所以我们应该在下周完成。

对于 Transfer Push 来说,这需要更多的时间,我相信团队计划在 4 月 3 日那一周进行工作,所以最多应该在下个月内完成。

导出/导入将分别镜像传输。

0

我很想看到这个功能的发布。感谢您在 Strapi 上所做的所有出色工作?

2

@derrickmehaffy - 是否有预计我们何时可以看到此发布?一切顺利

5

我相信他们会在本周开始的下一个冲刺中完成它,应该在接下来的两周内完成。

6

太棒了@derrickmehaffy,谢谢。这方面有更新吗?

6

他们仍在努力,这里有一个 PR:https ://github.com/strapi/strapi/pull/17105 ,但我们正在等待 Strapi 云上传提供商的修复,然后再合并它。