所以这肯定与: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后开始发生。我们现在正在使用:
请注意,在开发过程中,文件始终保存正确(本地文件系统)。我已经搜索了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附件的模型,每个模型都会出现问题。
答案 0 :(得分:1)
所以这结果是一个错误的结果。我将Rails升级到上周发布的4.2.1.rc1
,问题得到了解决。如果有人想要更多信息,请查看Github上的帖子:https://github.com/thoughtbot/paperclip/issues/1772。它为那些无法升级Rails的人提供了一种解决方法。