Ruby on rails RoR:正确设置回形针图像模型:S3桶的路径

Ruby on rails RoR:正确设置回形针图像模型:S3桶的路径,ruby-on-rails,amazon-s3,paperclip,cdn,amazon-cloudfront,Ruby On Rails,Amazon S3,Paperclip,Cdn,Amazon Cloudfront,在我的Rails 4应用程序中,我使用回形针将图像存储在S3上。S3存储桶中的任何图像如下所示: 现在,为了通过AWS CloudFront CDN提供图像服务,我建议在我的图像模型中设置:path属性。这里的确切价值是多少 has_attached_file :file, styles: { small: '120x50', medium: '350x350' }, :path => "images/files/../../:id/:style/:filename" 具体来说,我不确

在我的Rails 4应用程序中,我使用回形针将图像存储在S3上。S3存储桶中的任何图像如下所示:

现在,为了通过AWS CloudFront CDN提供图像服务,我建议在我的图像模型中设置
:path
属性。这里的确切价值是多少

has_attached_file :file, styles: { small: '120x50', medium: '350x350' }, :path => "images/files/../../:id/:style/:filename"

具体来说,我不确定如何处理上面图像URL中的/000/001/部分。因为这些是曲别针在S3上保存图像时创建的任意文件夹。否则,
:id、:style和:filename将在运行时正确地替换它们的值。

使用文件系统时,每个文件夹中可存储的文件量存在限制

在Linux系统上,如果要在一个文件夹中存储32000多个文件,则会收到一个错误因此,回形针会自动将您的文件分割到单独的文件夹中,这就是上面示例中000/001/920所做的。。。。。这是必要的


它采用对象id 1920,并在其前面加上0,得到九个数字,然后将它们拆分为单独的分区。如果您必须手动设置路径,而不是让曲别针处理此逻辑,您还必须手动分区文件,否则最终会遇到大问题。

我认为您不需要对路径做任何操作,您需要确保config.action\u controller.asset\u主机指向您的CloudFront域名,不是S3,您要查找的符号是:id\u分区

所以整条路都是


images/files/:id\u partition/:style/:filename

谢谢您的精彩解释。但我的问题是,这些图像已经存储在S3上了。现在为了使用CDN,我必须提供:path作为模板,这样回形针就可以代替CDN主机值,而不是每个图像的直接bucket path。但是您上面提到的唯一问题是“我不确定如何处理上面图像URL中的/000/001/部分”。上面文件路径的/000/0001/部分是关联对象id的一部分,完整格式的id为00000 1920。您自动返回的id为1920。您需要使用正则表达式来确定它是否是一个小于9位的数字,如果是,则在它前面加上0以将其格式化为9位,然后执行拆分操作并为目录分隔符/添加反斜杠。如果:id是555444666,则需要将格式设置为/555/444/666,这确实很奇怪,因为S3显然目前没有对存储桶中的资产数量进行限制。