【Rails6】herokuで投稿した画像が表示されない
この記事の概要
herokuの無料プラン(Free)プランを使ってると、更新ボタンを久方ぶりに押した時などにアップロードしたはずの画像が消えるよねーって話と、その解決策。
Railsで作成したアプリケーションにActive Storageと、Amazon S3を導入する方法で、どうやって実装していけばいいかを解説する。
Railsで作成したアプリケーションにActive Storageと、Amazon S3を導入する方法で、どうやって実装していけばいいかを解説する。
目次
- この記事の概要
- 目次
- 仕様
- 画像が消える問題
- 対処法
- 参考文献
- 解決策
仕様
・mac OS Catarina バージョン10.15.1(2017モデル)
・Rails 6
・heroku
Rails 6で作成したWebアプリケーションをherokuのフリープランでアップロードしたという前提で話します。
herokuは有料プランではなく、無料プランのFreeで登録しているとします。
画像が消える問題
herokuへのwebアプリケーションのアップロードが済んだ日の翌日、localhost:3000にアクセすると、どうやら画像が表示されていない...。
試しに適当な画像を一枚選んで再アップロードしてみたら、きちんと表示される。
どうやら、画像が投稿されてしばらく経つと、画像が勝手に消去されるらしい。なぜだろう。
どうやら、画像が投稿されてしばらく経つと、画像が勝手に消去されるらしい。なぜだろう。
対処法
・画像が消える理由
herokuのリポジトリがdynoという単位で管理されており、Freeプランだと一定時間経過後にdynoが再起動される仕様になっているから。→つまり、再起動されるたびに保存されているファイルは消去される。
・では、どうすればいい?
手順をざっくり解説すると、こうなる。①AWSコンソール(こちら:https://aws.amazon.com/jp/console/)にアクセスし、「S3」を選択。
②「S3」で、新しいバケットを作成し、自分のトークンIDとアクセスキーを取得。
③aws-sdk-s3というgemをインストールし、vim上でcredientalファイルにIDとキーを記述する。
④$heroku buildpacks:add https://github.com/heroku/heroku-buildpack-activestorage-preview
⑤コミット&デプロイ
という流れになる。
詳しい流れは、以下のQiitaの記事が非常に参考になりました。
https://qiita.com/DaichiSaito/items/80e89f0c96d88afcc5ff
Optional: herokuの有料プランをhobby以上にする(自分はhobbyにした)
※追記:freeでも、一応画像の保存はできるが、いちいちスリープするので、色々とめんどくさい。いっそのこと、契約しておいたほうが楽。
https://qiita.com/hmmrjn/items/479c9e9ce82771f1b6d7
参考文献
・【Rails】Herokuで画像を投稿できるようにする方法(ActiveStorage + Amazon S3)
・画像投稿機能のあるアプリでherokuを使っている場合、何故クラウドストレージでの管理が必要か
・Herokuでアップロードした画像が時間経つと消える問題
コメント
コメントを投稿