前提
RailsでActive Storageを用いた画像表示機能を含むアプリを作っています。
各種gemはインストール済みです
Gemfile
1gem 'mini_magick' 2gem 'image_processing', '~> 1.2' 3gem 'activestorage-validator'
念のためターミナルで
brew install imagemagick bundle install rails active_storage:install
を実行しましたが、リポジトリに変更はありませんでした。
発生している問題
ローカルでは問題なく画像が表示されるのですが、本番環境ではうまくいかないことがあり、下のようになってしまいます。
ただ、一度画像を差し替えると問題なく表示されるようになります。
↓↓
試したこと
Renderの無料プランでのデプロイのため、画像表示等サーバーの負荷?通信量?(この辺りは全くわかりません)が大きいと表示に問題が出てしまうのではと思い、mini_magickを用いて画像のサイズを小さくして表示するようにしました。
app/views/users/show.html.erb
1<%# 編集前 %> 2<% @user.images.each do |image| %> 3 <%= image_tag(image, class: "profile-image") %> 4<% end %> 5 6<%# 編集後 %> 7<% @user.images.each do |image| %> 8 <%= image_tag(image.variant( resize: "300x300>" ).processed, class: "profile-image") %> 9<% end %>
すると今度は、そもそもページが読み込まれなくなってしまいました。
なお、サイズを小さくした画像が表示されないページは読み込まれますが、画像は表示されません。
次に、表示画像の編集画面(遷移できます)から画像を差し替えると、今度は正常に表示され、正しく圧縮されていました。
↓↓
※画像左側が圧縮前、見切れている右側が同じファイルの圧縮後です
問題まとめ
編集後の画像は問題なく圧縮、表示されていることから、問題ははじめに仮定したサーバー云々ではなく、デプロイ時にActive Storageのデータが正しく呼び出されなかったからではないかと思いました。
しかし、どの設定に問題があるのか等がわからない状況です。
ご教示いただけると嬉しいです。
当該のソースコード
デプロイに関係ありそうな部分はここでしょうか
bin/render
1#!/usr/bin/env bash 2# exit on error 3set -o errexit 4 5bundle install 6bundle exec rake assets:precompile 7bundle exec rake assets:clean 8bundle exec rake db:migrate
実現したいこと
- いつでも画像が正しく表示されるようにしたいです
- デプロイの度にデータベースをリセットするのは避けたいですが、ページや画像が表示なくなってしまうくらいなら、抵抗はありません
補足情報(FW/ツールのバージョンなど)
Ruby: 2.6.5
Rails: 6.0.6
image_processing: 1.12.2
mini_magick: 4.12.0(Gemfile.lockより、>= 4.9.5, < 5という記述もあり)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/13 03:39
2023/01/13 05:54