はじめに
こんにちは。
現在、Ruby on Rails で Web アプリケーションを開発しています。
今回は、無料ホスティングサービス「Render」でデプロイした際に発生する
「アップロード画像が時間とともに消えてしまう問題」を解決する方法を紹介します!
対象読者:
- Renderの無料プランを使いたい人
- Active Storageを使って画像アップロードしたい人
- とにかくコストをかけずにRailsアプリを公開したい人
問題
Renderでアプリをデプロイ後、アップロードした画像が時間経過で消える。
原因
Render(Freeプラン)のファイルシステムは一時的です。
つまり、public
や storage
フォルダに保存したファイルは、以下のタイミングで削除されます。
- サーバーの再起動
- デプロイ時
- 自動スリープ後の再起動
つまり、画像をローカルディスクに保存するだけではダメなんです。
解決方法
RenderのFreeプランを継続しながら解決するには、外部ストレージに保存する必要があります。
今回は初心者におすすめなCloudinaryを使う方法を紹介します。
Cloudinaryとは
画像や動画のアップロード・CDN配信ができるクラウドサービス。
導入手順:
- Cloudinaryで無料登録
- gem 'cloudinary' を追加し、bundle install
- Active StorageとCloudinaryを連携
bin/rails active_storage:install
- config/storage.yml に以下を追記
cloudinary: service: Cloudinary
- .env or credentials.yml.enc にAPIキー等を記載
CLOUDINARY_URL=cloudinary://API_KEY:API_SECRET@CLOUD_NAME
- config/environments/production.rb に設定
config.active_storage.service = :cloudinary
※ .env
は dotenv-rails
を使っている場合に利用できます。
Renderでデプロイするなら credentials.yml.enc
に書く方が安心です。
おわりに
Renderの無料プランとCloudinaryの無料枠を使えば、完全に無料でRailsアプリに画像アップロード機能を追加できます!
この記事が「お金をかけずにアプリ制作」したい方の助けになれば嬉しいです!
今後も、費用を抑えたアプリ開発や、初学者でも取り組みやすい技術記事を投稿予定です。
よければフォロー・いいねお願いします🙌