2012-10-31 2 views
0

내 저장소의 특정 파일을 S3에 동기화하는 레이크 작업을 구현할 생각입니다. 캐치는 Repo에서 파일이 변경 될 때 파일을 업데이트하기를 원한다는 것입니다. 따라서 파일 A가 수정되고 B가 동일하게 유지되면 다음 번 앱을 배포하는 동안 파일 A 만 S3에 동기화됩니다.S3에 레일 레포에서 파일 동기화

파일이 수정되었는지 확인할 수있는 확실한 방법은 무엇입니까? 파일이 로컬로 변경되었는지 여부를 확인하기 위해 git을 사용하려고 생각하고 있습니다.이 작업을 수행하는 다른 방법은 무엇입니까? S3는 이와 유사한 기능을 제공합니까?

답변

3

S3는 현재 이상적인 솔루션 인 조건부 PUT을 지원하지 않지만 대신 두 가지 요청으로이 동작을 얻을 수 있습니다. 당신이 S3에서 원하는 각 파일에 대해

  • : 동기화 작업이 같을 것
    • 로컬 파일의 MD5를 계산합니다.
    • 해당 S3 개체에 대해 HEAD 요청을 발행하십시오.
    • 개체의 Content-MD5이 다르거 나 개체가없는 경우 PUT 요청을 발행하십시오. 말했다

, 이것은 당신이 바퀴를 개혁 할 것입니다 경우에 당신이 자산을 할 거라고 뭔가처럼 많이 들린다. Rails 3 자산 파이프 라인은이 문제를 잘 처리합니다. 특히 지문 인식 애셋을 사용하고 URL에 해시를 넣으면 불변의 값인 max-age 값으로 처리 할 수 ​​있습니다. asset_sync gem은 이미 애셋을 S3에 넣을 수 있습니다. 자동으로

+0

HEAD 요청을 보낼 때 S3에서 MD5를 다시받을 수 있습니까? 나는 뒤틀림을 볼 수 없다. – denniss

+0

PUT 요청에 하나를 입력했다면 그렇다. 현재 S3는 MD5를 객체의 'Etag'로 사용하지만이 동작이 미래에 변경 될 수도 있습니다. – willglynn

0

삭제 된 파일은 어떻게됩니까? 가장 쉬운 방법은 전체 디렉토리를 최신으로 비우는 것입니다.

+0

파일의 'modified-since' 헤더에 의존하여 내 클라이언트가 언제 파일을 가져올 것인지 알 수 없는지 알고 싶습니다. – denniss