前提・実現したいこと
Railsアプリを Heroku にデプロイし、heroku run rails db:migrate
まで済ませました。
ローカル環境と変わらずステージング環境でも上手くビューが表示されているのですが、画像表示に関連していくつか疑問点が出てきました。
Qiita を参考に、一定時間が経つと Heroku でアップロードした画像が消える点も学びました。私のアプリでも同様に一定時間が経つと画像が表示されなくなる状態です。
[質問1]
前述の通り、ユーザーが更新した画像は一定時間が経つと表示されなくなるのに対し、デフォルトに設定している画像は消えずに表示されたままです。
画像は全て同じ public
配下に保存しているにも関わらず、このように結果がずれる理由が分かりません。
Qiita には「一定時間が経つと、Heroku上のリポジトリ (Dyno) が最後のコミットの状態にリセットされる」とありますが、リセットされるたび、git push
されたコードが毎回読み込まれる為、そこに記述のあるデフォルトの画像は消えずに毎回読み込まれると言う事なのでしょうか。
以下がユーザーを新規登録する際のコードです。
users_controller.rb
def create @user = User.new( name: params[:name], email: params[:email], image_name: "default_user.jpg", ←デフォルトのプロフィール画像を指定して保存。 cover_image_name: "default_cover_user.jpg", ←デフォルトのカバー画像を指定して保存。 password: params[:password] ) if @user.save session[:user_id] = @user.id flash[:notice] = "Your account has been successfully created" redirect_to("/users/#{@user.id}") else render("users/new") end end
[質問2]
Herokuでアップロードした画像が一定時間経つと消えてしまいます(rails)にあるように、画像は AWS S3 のようなストレージに保存すべきと言うことが分かりました。
またデータベースに画像を保存するのはありでしょうか?にあるように、データ量の大きい画像などのファイルは専用ストレージに保存するのが好ましいとの事ですが、私のアプリでは今の所画像以上に容量を食うカラムは存在しません(テキストのみ)。ですので他は特に画像のようにストレージを別途用意する必要はないでしょうか。(ストレージサービスを利用する前に、認識が合っているかを確認しておきたかった為質問致しました。)
[質問3]
app/assets/images
配下と public
配下の、保存場所の違いに関して。
「app/assets/images
配下に保存することでアセットパイプラインの対象になり、表示が早くなる」とありますが(参考ページ)、やはりそちらの保存場所の方が望ましいのでしょうか?
現在 public
配下に画像を保存しておりますが、特にこだわりはなく習慣でそうしております。アプリ全体を修正するのは少し大変そうですが、変更するだけのメリットがあれば修正したいと思います。
[質問4]
以下のコードに関してはどちらも同じ意味で、単純に上のコードをコンパイルしたものが下のコードだと思います。
これまでは習慣で下のコードをアプリ全体で書いておりましたが、これも優劣などはありますでしょうか。このデプロイを機会に、修正出来る所はしておこうと思いました。
<%= image_tag "/user_images/#{user.image_name}" %> <img src="<%= "/user_images/#{user.image_name}" %>">
尚、本番環境での画像表示に関して config/envinronments/production.rb
内の記述は以下のように true
に既に変えております。
config.assets.compile = false ↓ config.assets.compile = true
細々とした疑問になってしまったのですが、どなたかご助言頂けますと有難いです。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/19 11:17