Django AmazonS3 local環境で、static_storageをS3に設定した時の話
コードの概要
settings/local.py
... STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static_in_pro", "our_static"), ) STATICFILES_STORAGE = 'appname.custom_storages.StaticRootS3BotoStorage' STATIC_URL = "https://%s/%s/" % ("bucketname.s3-website-ap-northeast-1.amazonaws.com", "static") MEDIA_URL = "https://%s/%s/" % ("bucketname.s3-website-ap-northeast-1.amazonaws.com", "media") DEFAULT_FILE_STORAGE = 'appname.custom_storages.MediaRootS3BotoStorage' ... AWS_STORAGE_BUCKET_NAME = 'bucketname' # これをTrueにしたほうがファイル変更のチェックが速くなる AWS_PRELOAD_METADATA = True AWS_ACCESS_KEY_ID = '****************' AWS_SECRET_ACCESS_KEY = '******************' AWS_S3_HOST = 's3-ap-northeast-1.amazonaws.com'
custom_storages.py
from storages.backends.s3boto import S3BotoStorage StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static') MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
ポイント
- S3の、bucketnameにはピリオドを使わない。NG例-> foo.var.com とかはダメ。OK例->foovarcomとか。
- AWS_S3_HOST を指定する。(指定しないとcollectstaticの時に、boken pipeというerrorが出てしまう。)ホストのアドレスは、以下を参照。