`variant`メソッドを使ったが画像が表示されない現象に対処する! with Rails7, Active Storage
概要
RailsチュートリアルをRails 7
で実装に挑戦。
そしてRailsチュートリアルでも登場してくるvariant
メソッド。(第13章)
こちらを使って投稿した画像を表示しようとしたが、なぜか表示されない現象が発生。
さてこの現象と向き合うことにしよう...
結論
解決するためには以下の2通りある。簡単だ。
1: vips
ライブラリをインストールする
$ brew install vips
2: 明示的にmini_magick
を指定する
# ===== 省略 =====
module RailsTutorialApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
# ===== 以下を追加 =====
config.active_storage.variant_processor = :mini_magick
# ===== 省略 =====
end
end
Why?
まず、前提として画像の加工にはImageMagick
のインストールが必要だ。
$ brew install imagemagick
インストールが完了したら次はGemが必要になる
gem "image_processing"
gem "mini_magick"
*Railsチュートリアルを進めている人は、指定のバージョンを明示的にするべきかもしれません。
$ bundle install
gem "image_processing"
を導入することで冒頭のActive Storageが提供するvariant
メソッドを使えるようになります。
...so you must add gem "image_processing" to your Gemfile if you wish to use variants.
引用:ActiveStorage::Variant < Object
ただし、Rails 7
ではデフォルトでvips
ライブラリが使われるようになっているみたいです。
*上記のRailsAPIドキュメントではMiniMagicとなってますが...
...and have config.load_defaults 7.0 set in config/application.rb, then your app will use vips by default.
引用:Could not open library 'vips.42'; Could not open library 'libvips.42.dylib'
というわけで、結論に戻ってくるわけだが
1: vips
ライブラリをインストールする
$ brew install vips
2: 明示的にmini_magick
を指定する
# ===== 省略 =====
module RailsTutorialApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
# ===== 以下を追加 =====
config.active_storage.variant_processor = :mini_magick
# ===== 省略 =====
end
end
結果...上手く行った!!!
おまけ
ちなみに私の場合、投稿直後のログはこのようになっていた。(一部抜粋)
# ==== 省略 =====
22:04:32 web.1 | LoadError (Could not open library 'vips.42': dlopen(vips.42, 0x0005): tried: 'vips.42' (no such file), '/usr/local/lib/vips.42' (no such file), '/usr/lib/vips.42' (no such file), '/Users/***/my_app/rails_tutorial_app/vips.42' (no such file).
22:04:32 web.1 | Could not open library 'libvips.42.dylib': dlopen(libvips.42.dylib, 0x0005): tried: 'libvips.42.dylib' (no such file), '/usr/local/lib/libvips.42.dylib' (no such file), '/usr/lib/libvips.42.dylib' (no such file), '/Users/***/my_app/rails_tutorial_app/libvips.42.dylib' (no such file)):
やはり、デフォルトではvips
ライブラリを使用しているみたいだ。
Discussion