将文件系统从本地移动到 S3 后,将旧的奏鸣曲媒体文件同步到 S3


Sync old sonata media files to S3 after shift filesystem from local to S3

我们之前将所有奏鸣曲媒体文件存储在本地目录中,但现在我们迁移到了 AWS S3。转移到S3后,现在Sonatamedia无法访问旧的本地文件。Sonatamedia也在尝试在S3上查找旧文件。新文件正在 S3 上上传并可访问。

现在请告知如何将我们的旧数据同步到 S3 或 SonataMedia 捆绑包可以在本地而不是 S3 上查找旧文件。

我们目前的SonataMedia配置如下所述

sonata_media:
filesystem:
    local:
        directory:  %kernel.root_dir%/../web/uploads/media
        create:     true
    s3:
        bucket: %sonata_media_s3_bucket%
        accessKey: %sonata_media_s3_accessKey%
        secretKey: %sonata_media_s3_secretKey%
        region: %sonata_media_s3_region%
        create: true
        .....

我处于同样的困境,我可以成功地解决它。SonataMediaBundle 有一个 cli 同步命令,基本上它会根据 cdn 配置重新生成媒体上下文的路由,因此如果您执行:

app/console sonata:media:sync

你会得到类似这样的信息:

Please select the provider
    [0] sonata.media.provider.image
    [1] sonata.media.provider.file
    [2] sonata.media.provider.youtube
    [3] sonata.media.provider.dailymotion
    [4] sonata.media.provider.vimeo

这些上下文属于我的项目,您可能具有类似的结构。我的情况我只是有图像,这意味着只有第一个:sonata.media.provider.image。然后,在设置选项后,例如: 0 系统会要求您选择上下文,例如:

Please select the context
    [0] default
    [1] news
    [2] collection
    [3] category
    [4] profile

只需选择您当前使用的所有上下文(当然是一步地逐个(。

对于每个步骤,您都会得到类似以下内容:

Loaded 52 medias (batch #1, offset 0) for generating thumbs (provider: sonata.media.provider.image, context: default)
Generating thumbs for Scenario - 1
...
...
...
Done (total medias processed: 52).

完成所有流程后,如果您在管理控制面板中列出所有映像,您将看到所有映像都具有属于 AWS S3 的新 URL。

第一步,请确保您没有本地存储集,因此您的设置应如下所示:

sonata_media:
    filesystem:
        s3:
            bucket: %sonata_media_s3_bucket%
            accessKey: %sonata_media_s3_accessKey%
            secretKey: %sonata_media_s3_secretKey%
            region: %sonata_media_s3_region%
            create: true

而不是:

sonata_media:
    filesystem:
        local:
            directory:  %kernel.root_dir%/../web/uploads/media
            create:     true
        s3:
            bucket: %sonata_media_s3_bucket%
            accessKey: %sonata_media_s3_accessKey%
            secretKey: %sonata_media_s3_secretKey%
            region: %sonata_media_s3_region%
            create: true

尽管您一直在本地存储图像,但您无需设置本地存储即可将新内容与 AWS S3 同步。

同步过程只是重建存储媒体的路径。现在,它不会将内容推送到 AWS S3,这就是为什么您必须手动上传上传目录,直接从存储桶的根目录开始存储媒体。

媒体的文档建议基于 S3 中的静态存储的 cdn 路径,如果您不使用静态存储,我建议您使用默认 URL,例如:

...
cdn:
    # define the public base url for the uploaded media
    server:
        path: "https://s3.amazonaws.com/%sonata_media.s3.bucket_name%/%sonata_media.cdn.host%"
...

假设您已经完成了 cli sync 命令的运行,并且已经将媒体上传到 AWS S3。

最后一步是重新保存包含图像或媒体的每个内容(例如:博客中所有包含图像的帖子(,这意味着您应该从管理仪表板中逐个打开它们,然后必须单击更新和关闭按钮以更新媒体源(图像/视频/文件(,因为这些不是自动更新的。

我建议您先在开发/暂存环境中执行所有这些步骤,然后再在生产中执行。

成功执行上述步骤后,您可以删除旧的上传目录(旧的本地存储(。

做!