我正在尝试在 Heroku 中部署我的项目,但媒体文件(图像)会在一段时间后被删除,所以有人告诉我我需要使用一个名为“Amazon S3”的服务,我的问题是,如何将我的项目配置为使用该服务。有人可以帮助我吗?
2 回答
您可以按照本文中的步骤进行操作:
http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/
但是一个小教程可以做到这一点:
第 1 步- 安装 boto 和 django-storages:
$ pip install boto django-storages
将 django-storages 添加到 INSTALLED_APPS:
INSTALLED_APPS += ('storages',)
第 2 步- 创建您的 S3 存储桶:
转到https://console.aws.amazon.com/s3/home并创建它。
- 如果您有任何疑问,请参阅:https ://devcenter.heroku.com/articles/s3。
第 3 步- 获取您的凭据:
转到https://console.aws.amazon.com/iam/home?#security_credential,单击“访问密钥”并创建它。
第 4 步- 将您的凭据添加到 django 设置:
首先,在项目文件夹中创建一个名为 s3utils.py 的文件,内容如下:
from storages.backends.s3boto import S3BotoStorage
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
我更喜欢使用所有这些配置作为环境变量,所以我建议你这样做:
$ heroku config:set AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY S3_BUCKET_NAME=YOUR_BUCKET_NAME
之后,将其放入您的设置中:
AWS_STORAGE_BUCKET_NAME = os.environ['S3_BUCKET_NAME']
MEDIA_ROOT = '/media/'
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL + MEDIA_ROOT
DEFAULT_FILE_STORAGE = 'YOUR_PROJECT.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'YOUR_PROJECT.s3utils.StaticRootS3BotoStorage'
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
第 5 步- 再次运行 collectstatic
您需要再次收集静态文件,以便将其放入亚马逊。
heroku run python manage.py collectstatic
我希望它有帮助!
初学者请查看此 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html
基本上,您不需要 Django 在这里提供任何服务,而是需要确保静态引用指向另一个域(S3 域)而不是 Heroku 域。