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

Paperclip attachment saving with incorrect S3 URL about 50% of the time

更新:

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

我将非常感谢你们 thoughts/tips 对此提出的任何意见。谢谢!


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

main_event_photos_46_47fd4f3c2fea17fbb7a0bd27c648911557f9e12b_main.png

但是调用@event.main_event_photo.url(:main) returns

main_event_photos_46_15744de74a36207b672356b5ad4c6b30eb4ba85f_main.png

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

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

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

编辑:

型号:

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 %>

请注意,我们有许多带有回形针附件的型号,每个型号都会出现此问题。

所以这原来是一个错误的结果。我将 Rails 升级为上周发布的 4.2.1.rc1,问题已解决。如果有人需要更多信息,请查看 Github 上的帖子:https://github.com/thoughtbot/paperclip/issues/1772。它包括针对无法升级的人的解决方法 Rails。