Home#index 中的 ActiveStorage::InvariableError

Ste*_*lar 7 ruby-on-rails imagemagick rails-activestorage ruby-on-rails-6

目前我正在尝试在 Rails 6 中显示.HEIC图像。我正在使用ActiveStorage ImageMagic来使用变体来显示jpg. 基本上我正在尝试使用

mogrify -format jpg myimage.heic
Run Code Online (Sandbox Code Playgroud)

在图像中进行显示jpg

我添加Rails.application.config.active_storage.variant_processor到 application.rb 中以便能够使用该变体。然而,它似乎打破了以下行:

 <%= image_tag post.image.variant(format: 'jpg'), class: "card-home__img" %>
Run Code Online (Sandbox Code Playgroud)

为什么不工作?

小智 11

您只能调用在调用时variant返回的图像。truevariable?

在内部ActiveStorage检查是否ActiveStorage.variable_content_types包含您的图像类型。默认支持的值为:

  • image/png
  • image/gif
  • image/jpg
  • image/jpeg
  • image/pjpeg
  • image/tiff
  • image/bmp
  • image/vnd.adobe.photoshop
  • image/vnd.microsoft.icon
  • image/webp

所以目前似乎不支持 .HEIC 图像。

您可以在将图像附加到模型或存储之前应用格式转换,这可能会解决您的用例。


小智 0

ActiveStorage::Blob#variant在不可变的 blob 上调用时引发。用于ActiveStorage::Blob#variable?确定 blob 是否可变。

来源https ://edgeapi.rubyonrails.org/classes/ActiveStorage/InvariableError.html