Heroku と Amazon S3 は初めてなので、ご容赦ください。Django アプリを Heroku にアップロードしましたが、ユーザー メディアのアップロードに問題がありました。モデルは以下です。
#models.py
class Movie(models.Model):
title = models.CharField(max_length = 500)
poster = models.ImageField(upload_to = 'storages.backends.s3boto')
pub_date = models.DateTimeField(auto_now_add = True)
author = models.ForeignKey(User)
poster 属性は、画像がアップロードされる属性です。ローカルでは問題なく動作していましたが、Heroku でエラーが発生しました。そこで、他の多くの投稿で指示されたように、「storages.backends.s3boto」を追加しました。(正しいかどうかはわかりません)。
私の Settings.py ファイルは現在、次のようになっています。
#settings.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
PROJECT_DIR = os.path.join(PROJECT_ROOT, '../qanda')
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = '****************'
AWS_SECRET_ACCESS_KEY = '************'
AWS_STORAGE_BUCKET_NAME = 'mrt-assets'
AWS_PRELOAD_METADATA = True
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'qanda/media/movie_posters/)
MEDIA_URL = '/media'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = 'https://mrt-assets.s3.amazonaws.com/static/'
STATICFILES_DIRS = (os.path.join(PROJECT_DIR, 'static'),)
私のバケットは mrt-assets と呼ばれ、そこには 2 つの静的フォルダー (css、js、images、および media) があります。CSS/JS ファイルを自分のHTML ファイル*ですが、ユーザーがアップロードしたメディア (あらゆる種類の画像) を mrt-assets/media に取得するにはどうすればよいですか?
*ただし、誰かが STATIC ファイルについても支援したい場合、それは素晴らしいことです。しかし、ユーザーがアップロードしたメディアはより緊急です。
編集(Yujiのコメントによる):
いくつかのオプションを試しましたが、どれも機能しませんでした。戻って多くの変更を削除しました。これが私の設定になりました
#settings.py
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = 'http://s3.amazonaws.com/mrt-assets/media/'
MEDIA_URL = '/media/'
STATIC_ROOT = 'http://s3.amazonaws.com/mrt-assets/static/'
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, "templates"),)
#models.py
#same as before, but now have changed the poster directory
poster = models.ImageField().
何をすべきかよくわかりません。ユーザーのメディアアップロードがそこに保存されるように、Heroku アプリを S3 に接続する必要があります。
S3バケットをこれに変更しました
mrt-assets
static
css
js
images
media
(empty)