Ruby on rails 3 裁剪图像后,S3不会';t存储所有图像大小
I使用回形针+S3存储图像Ruby on rails 3 裁剪图像后,S3不会';t存储所有图像大小,ruby-on-rails-3,amazon-s3,paperclip,jcrop,Ruby On Rails 3,Amazon S3,Paperclip,Jcrop,I使用回形针+S3存储图像 has_attached_file :image, :whiny => false, :styles => { :large => "550x340>", :medium => "165x165>", :small
has_attached_file :image,
:whiny => false,
:styles => { :large => "550x340>",
:medium => "165x165>",
:small => "100x100>",
:thumbnail => "55x55>"},
:processors => [:cropper],
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "/:id/:style",
:bucket => "XXX"
当我用图像创建一个对象时,一切都很顺利(我的S3存储桶中存储了4个不同大小的图像副本)
当我使用JCrop裁剪图像时,问题出现了,S3存储了4个拷贝,但是对于裁剪后的图像,大小相同,实际上是大尺寸
My controller.rb:
def update
@deal = Deal.find(params[:id])
respond_to do |format|
if @deal.update_attributes(params[:deal])
format.html { redirect_to(@deal, :notice => 'Deal was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @deal.errors, :status => :unprocessable_entity }
end
end
这就是它的工作原理:
- 将文件保存到AmazonS3
- 您可以通过CDN请求该文件
- CDN检查其缓存文件是否可用
- 如果不可用,从s3请求文件,缓存它并提供服务
- 如果可用,从缓存中提供服务。此步骤可确保用户获得最佳体验。如果CDN每次都从s3获取文件,那么它将比用户直接从s3获取文件花费更长的时间,这将破坏CDN的用途
- 裁剪图像并将修改后的文件保存到s3
- 您为文件请求CDN,希望它将为您提供裁剪过的文件
- CDN检查其缓存中的文件,找到它并从缓存中提供文件。它不会再次询问s3文件是否被修改
希望,它澄清了问题。您是否使用CDN来提供文件?如果是,则图像缓存在边缘位置。一种方法是要求CDN从缓存中删除图像,但这需要花费金钱,因此请使用新名称保存剪切的文件。我不明白为什么缓存会造成我的问题?很好的解释,谢谢。但让我澄清一下我的问题:我得到了4个相同大小的版本,用于裁剪图像,而不是原始图像。在这种情况下,缓存仍然是个问题吗?如果我理解正确,如果您直接将图像保存到对象,一切都会很好,但是如果您在保存之前使用jcrop裁剪图像,在新对象中,您会得到大小相同的所有样式吗?是这样吗?如果是的话,很可能缓存在这里不起作用,我不知道出了什么问题。不,我已经有了一个对象,当我用裁剪图像更新它时,我有一个裁剪图像,大小为一个而不是4个。这也没有意义,你是否尝试过在新对象中上载裁剪图像,而不是更新现有对象。没有用过回形针,我用的是卡里尔波。如果是CW,我建议将调试代码放在回调中以找到问题的根源。