1

我们之前将所有奏鸣曲媒体文件存储在本地目录中,但现在我们已转移到AWS S3。现在转到S3后,sonatamedia无法访问旧的本地文件。 Sonatamedia也试图在S3上找到旧文件。新文件在S3上传并可访问。在将文件系统从本地文件系统迁移到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 
     ..... 

回答

1

我是在同样的困境,我能成功地解决这个问题。 SonataMediaBundle有一个CLI sync命令,基本上重新生成基础上,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。然后设置你的选项,e.g后:0你会被要求选择的背景下,e.g:

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). 

一旦所有的进程已经完成,如果你发布管理仪表板中的所有图像,你会看到所有的人都有新的URL,属于AWS S3。

作为第一步,保证你没有本地存储设置,所以你的设置应该是这样的:

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,因此您必须手动上传您的上传目录,直接从现在开始存储介质的存储桶的根目录。

media's documentation建议基于在S3的静态存储CDN的路径,如果你不使用的静态存储,我推荐你使用默认的网址,例如:

... 
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。

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

我建议你继续在生产中执行它之前执行你的开发/舞台环境中的所有这些步骤。

一旦你成功执行了前面的步骤,你可以删除旧的上传目录(旧的本地存储)。

完成!

相关问题