回形针附件在大约50%的时间内使用不正确的S3 URL保存

时间:2015-02-17 22:23:39

标签: ruby-on-rails amazon-s3 paperclip

更新

所以这肯定与:hash_data选项有关,特别是:updated_at段。不知何故,文件正在保存到S3存储桶,其中包含与Paperclip用于读取文件不同的:updated_at值。这可能是由于一些竞争条件,考虑到间歇性发生?正如我在下面提到的,在将Paperclip升级到4.2.1之后就开始了这个问题。

我将非常感谢你们对此有任何想法/提示。谢谢!


通过Paperclip将图像上传到S3存储桶时,有时会使用与附件#url方法返回的文件名不同的文件保存文件。例如,图像保存到

main_event_photos_46_47fd4f3c2fea17fbb7a0bd27c648911557f9e12b_main.png

但是,调用@ event.main_event_photo.url(:main)会返回

main_event_photos_46_15744de74a36207b672356b5ad4c6b30eb4ba85f_main.png

正如您所看到的,插值的:hash部分不匹配,除了在S3控制台中打开存储桶之外,我无法找到实际的URL。这个问题似乎发生在大约一半的时间。有时上传完全相同的文件正确保存,并且url方法会正确访问它。

此问题在我们升级Rails / Ruby / Paperclip后开始发生。我们现在正在使用:

  • Ruby 2.1.5
  • Rails 4.2.0
  • Paperclip 4.2.1

请注意,在开发过程中,文件始终保存正确(本地文件系统)。我已经搜索了Stackoverflow和谷歌无济于事。如果我能提供任何其他信息,请告诉我。谢谢!

修改

型号:

has_attached_file :main_event_photo, {
:styles        => {   :original => {:geometry => "1280x800#", :format => 'png'},
                      :main => {:geometry => "640x400#", :format => 'png'},
                      :thumb => {:geometry => "330x220#", :format => 'png'}
},
:convert_options => {:original    => '-quality 80',
                     :main    => '-quality 80',
                     :thumb    => '-quality 80'
},
:default_style => :main
}.merge!(PAPERCLIP_STORAGE_OPTIONS) # this is defined in the config/environments

validates_attachment_content_type :main_event_photo, :content_type => ['image/jpeg', 'image/png', 'image/gif', 'image/x-png', 'image/pjpeg']
validates_attachment_presence :main_event_photo

表格(基本上):

<%= simple_form_for(@event, :url => { :action => @event.id.nil? ? "create" : "update" }) do |f| %>
  <%= f.file_field :main_event_photo %>
<% end %>

请注意,我们有许多带有Paperclip附件的模型,每个模型都会出现问题。

1 个答案:

答案 0 :(得分:1)

所以这结果是一个错误的结果。我将Rails升级到上周发布的4.2.1.rc1,问题得到了解决。如果有人想要更多信息,请查看Github上的帖子:https://github.com/thoughtbot/paperclip/issues/1772。它为那些无法升级Rails的人提供了一种解决方法。