我已将应用部署到fly.io,但发现了一个有趣的错误,该错误仅影响生产。使用本地存储时,同一个gif不会导致此问题。该gif已上传到AWS S3
首先,我在磁贴0 x 1104中收到VIP警告**错误,然后是ActionView::Template::Error(gifload:图像完成前检测到图像EOF
下面是我用来加载图像的代码:
<% if post.images.attached? %>
<% post.images.each do |image| %>
<%= image_tag image.representation(loader: { n: -1 }, resize_to_fit: [400, nil]).processed, class: "img-fluid" %>
<% end %>
这就是我们要讨论的gif,我没有看到它有什么特别或奇怪的地方,我的其他gif文件更大,更宽,更高,不会导致应用程序崩溃。有没有办法用Active Storage来拯救失败的gif加载?
我试着添加这些行:
<% if post.images.attached? %>
<% post.images.each do |image| %>
<%= image_tag image.representation(loader: { n: -1 }, resize_to_fit: [400, nil]).processed, class: "img-fluid", onerror: "this.style.display='none'" %>
<% end %>
当我重新部署站点时,这没有修复任何问题
<% if post.images.attached? %>
<% post.images.each do |image| %>
<%= image_tag image.representation(loader: { n: -1 }, resize_to_fit: [400, nil]).processed, class: "img-fluid", rescue nil %>
<% end %>
这会导致一个语法错误,显然vips有问题,我找到了一个关于这个问题的旧线程,但是没有解决方案:https://github.com/libvips/libvips/issues/1701
我已经在开发中测试了使用AWS上传和加载gif,没有出现任何问题。
1条答案
按热度按时间ygya80vv1#
你的服务器上可能有一个很老的libvips二进制文件,我会找出它的版本。
例如:
ruby-vips是libvips库二进制文件的一层薄薄的皮肤,它本身几乎没有任何功能,它只是以ruby-like的方式在您的平台上呈现libvips二进制文件中可用的特性。
libvipsGIF处理在过去几年中有了很大的改进,听起来您的生产机器可能需要更新。