내 응용 프로그램의 종속성을 최신 상태로 유지하는 중입니다.Boto, Pipeline 및 Storages의 최신 버전에서 collectstatic을 사용할 때 x-amz-acl이 잘못 설정되었습니다.
- BOTO : 2.34.0
- 장고 - 파이프 라인으로 업그레이드 : 1.4.2로 업그레이드
- 장고-필요합니다 업그레이드 1.0.6
- 에 나는 requirements.txt 다음 변경을 장고 - 스토리지 : 있었다 최근에 (1.1.8)
지금은 내 S3 버킷에 collectstatic 실행하려고하면, 나는 다음과 같은 오류 얻을 :
boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidArgument</Code><Message></Message><ArgumentName>x-amz-acl</ArgumentName>
<ArgumentValue>/tmp/tmpDyVin1</ArgumentValue><RequestId>xxx</RequestId>
<HostId>yyy</HostId></Error>
분명히 /tmp/tmpDyVin1
이 not a valid value for x-amz-acl이기 때문에 놀랄 일이 아닙니다.
이슈는 BOTO을 결합 정적 파일을 처리하기 위해 내 자신의 클래스를 지정에서 유래 필요하고, 파이프 라인 :
settings.py
STATICFILES_STORAGE = 'myapp.storage.OptimizedS3BotoStorage'
storage.py
from pipeline.storage import PipelineMixin
from require.storage import OptimizedFilesMixin
from storages.backends.s3boto import S3BotoStorage
class ReleaseVersionCachedFilesMixin(CachedFilesMixin):
def hashed_name(self, name, content=None):
...
class OptimizedS3BotoStorage(PipelineMixin, OptimizedFilesMixin, ReleaseVersionCachedFilesMixin, S3BotoStorage):
pass
이것은 이전 버전의 al과 완벽하고 일관되게 작동했습니다. 이 모듈들. S3BotoStorage.__init__()
가 호출
- 가, 첫 번째 매개 변수,
acl
는이 tmp 디렉토리의 값으로 전달됩니다 : 새로운 코드를 파고, 그 문제는이 세과의 상호 작용에 달려 있음을 참조하십시오. 위의 값은public-read
보다 우선하며 위의 문제가 발생합니다. - 이
__init__()
루틴은CachedFilesMixin.__init__()
에 의해 호출되며args = ('/tmp/tmpnNUVD9',)
을 수신합니다. 이 작업을 수행__init__()
이PipelineMixin.__init__()
에 의해 호출되는 것을 - 는 :
def __init__(self, location=None, *args, **kwargs): if not settings.PIPELINE_ENABLED and location is None: location = tempfile.mkdtemp() super(PipelineMixin, self).__init__(location, *args, **kwargs)
그래서, 문제는 파이프 라인이 아래로 전파하고 acl
을하게됩니다 첫 번째 인수로 location
에 전달하는 것입니다.