はじめに
ローカル環境(DEBUG = True)では、mediaに保存されている画像が表示出来るのに、本番環境では表示することが出来ないという問題に直面した。
結論から言うと、サードパーティー製のクラウドストレージ(例:AWSなど)の1つである
cloudinary.comを利用することで解決したので、自分の行った手順を紹介したいと思う。
※djangoだけで、mediaに保存された画像を表示することは可能かもしれないが、調べきることが出来なかった。
また、
MEDIA files in production — Django
このサイトの内容を参考にしたので、英文に慣れている方はこちらの内容を参考にされると良いと思う。
注意:今回書いている記事は、ローカル環境では、mediaに保存された画像を表示出来ていることを前提としています。
Cloudinaryで行う手順
まず、cloudinary.comへの登録、ログインを行う。そしたら、Welcome to Cloudinary!と書かれているページになると思う。
そのページにある、Configure your SDKと書かれている部分をクリックし、自分の
cloud_name
api_key
api_secret
を確認する。これらは、この後にDjango内での設定に必要となる。
Djangoで行う手順
初めにターミナルにて、
pip install django-cloudinary-storage
を行う。
そして、Djangoのsettings.pyに
INSTALLED_APPS = [
...
'cloudinary_storage',
'cloudinary',
]
を追記する。
続いて、settings.pyの好きな場所に
CLOUDINARY_STORAGE = {
'CLOUD_NAME': '<your_cloud_name>',
'API_KEY': '<your_api_key>',
'API_SECRET': '<your_api_secret>',
}
を追加する。このCLOUD_NAME、API_KEY、API_SECRETには先程Cloudinary.comで確認を行なった自分のものを書く。
最後に、
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.RawMediaCloudinaryStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
をsettings.pyの最後に追加することでおしまい。
管理画面などから、画像を追加するとCloudinaryのデータベースに送られる。
そして、画像はそこから取得されるようになり、本番環境(DEBUG = False)でもローカル環境のように画像を表示することが可能になったと思う。