ruby-on-rails – 如何将CarrierWave文件迁移到新的存储机制?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何将CarrierWave文件迁移到新的存储机制?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Ruby on Rails站点,其中模型使用CarrierWave进行文件处理,目前使用的是本地存储.我想开始使用云存储,我需要将现有的本地文件迁移到云端.我想知道是否有人可以指出这样做的方法

使用模型属性的加分点,允许我在后台逐行执行此操作,而不会中断我的站点以延长停机时间(换句话说,某些模型行仍然具有本地存储,而其他模型行则使用云存储).

我的第一直觉是为每个使用云存储的模型创建一个新的上传器,所以我在每个模型上有两个上传器,然后将文件从一个传输到另一个,设置一个属性来指示应该使用哪个文件,直到它们全部转移,然后删除旧的上传者.这似乎有点过分.

解决方法

最小到可能为零的Donwtime程序

在我看来,通过几乎没有停机时间来实现您想要的最简单,最快捷的方法是:(我将假设您将使用AWS云,但类似的程序适用于任何云服务)

>找出并设置资产桶,存储桶策略等,以使资产可公开访问.
>使用s3cmd(用于与S3交互的命令行工具)或GUI应用程序,将整个资产文件夹从文件系统复制到S3中的相应文件夹.
>在您的应用中,设置carrierwave并更新模型/上传器:雾存储.
>不要重新启动您的应用程序.而是调出rails控制台和模型,检查新资产URL是否正确且可按计划访问.例如,对于带有图片资源的视频模型,您可以这样检查:

Video.first.picture.url

这将根据更新的设置为您提供完整的云URL.复制URL并粘贴到浏览器中以确保您可以正常使用.
>如果这适用于每个具有资产的模型的至少一个实例,则可以重新启动应用程序.
>重新启动后,您的所有资产都将从云端提供,您的模型中不需要任何迁移或多个上传程序.
>(基于@Frederick Cheung的评论):使用s3cmd(或类似的东西)rsync或将资产文件夹从文件系统同步到S3,以考虑在步骤2和5之间上传的资产(如果有的话).

PS:如果您需要帮助为云存储设置carrierwave,请告诉我们.

猜你在找的Ruby相关文章