2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

`variant`メソッドを使ったが画像が表示されない現象に対処する! with Rails7, Active Storage

Posted at

概要

RailsチュートリアルをRails 7で実装に挑戦。
そしてRailsチュートリアルでも登場してくるvariantメソッド。(第13章)
こちらを使って投稿した画像を表示しようとしたが、なぜか表示されない現象が発生。

qiita_error_pic.png

さてこの現象と向き合うことにしよう...

結論

解決するためには以下の2通りある。簡単だ。

1: vipsライブラリをインストールする

ターミナル
$ brew install vips

2: 明示的にmini_magickを指定する

config/application.rb
# ===== 省略 =====
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のインストールが必要だ。

ターミナル(Mac)
$ brew install imagemagick

インストールが完了したら次はGemが必要になる

Gemfile
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を指定する

config/application.rb
# ===== 省略 =====
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

結果...上手く行った!!!

qiita_correct_pic.png

おまけ

ちなみに私の場合、投稿直後のログはこのようになっていた。(一部抜粋)

ログ
# ==== 省略 =====
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ライブラリを使用しているみたいだ。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?