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)
海报属性是上传图片的属性。我让它在本地运行良好,现在在 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、图像和媒体。我现在不太担心静态文件,因为我已将 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)