2012-08-25 1 views
12

현재 Heroku에서 호스팅하는 앱을 사용하면 사진을 제출할 수 있습니다. 처음에는 파일 시스템에 그 사진을 저장하려고 생각했습니다. 데이터베이스에 저장하는 것은 나쁜 습관이었습니다.Heroku 용 영구 파일 시스템이 없습니까?

그러나 Heroku에는 영원한 파일 시스템이없고 임시 파일 시스템 만있는 것 같습니다. 이것이 사실입니까, 그렇다면 사진 및 기타 파일을 저장하는 것과 관련하여 어떤 옵션이 있습니까?

답변

18

사실입니다. Heroku는 클라우드 앱을 만들 수 있지만 클라우드 앱은 "영구적"인 것이 아닙니다. Amazon EC2에서 여러 번 복제 할 수있는 인스턴스 (또는 '굼벵이')입니다. 이것이 바로 Heroku에서 손쉽게 확장 할 수있는 이유입니다. 앱의 새 버전을 푸시하려면 슬러그가 다시 컴파일되고 이전 인스턴스의 파일 시스템에 저장 한 모든 파일이 손실됩니다.

사용자가 제출 한 사진을 CDN에 저장하는 것이 가장 좋습니다. 당신이 Heroku에 있고, Heroku가 AWS를 사용하고 있기 때문에, 아마존 S3를 추천 할 수 있습니다. 선택적으로 CloudFront를 사용할 수 있습니다.

이것은 Heroku의 일시적인 "제한"을 해결할뿐만 아니라 CDN이 훨씬 빠르며 사용자를위한 웹 응용 프로그램 및 사용자 환경에 더 나은 서비스를 제공하기 때문에 유용합니다.

6

사용하는 기술에 따라 가장 좋은 방법은 업로드를 S3 (Amazon의 스토리지 서비스)로 스트리밍하는 것입니다. 클라이언트 라이브러리로 S3와 상호 작용하여 파일을 게시하고 검색 할 수 있습니다. Boto는 Python 용 예제 클라이언트 라이브러리로, 모든 대중 언어 용으로 제공됩니다.

또 다른 점은 Heroku 파일 시스템도 공유되지 않는다는 것입니다. 이는 업로드를 처리하는 응용 프로그램 (예 : 작업자 프로세스 대신)과 동일한 응용 프로그램을 사용하여 파일을 S3에 저장해야 함을 의미합니다. 가능하면 업로드를 메모리에로드하고 디스크에 쓰지 말고 S3에 직접 게시하십시오. 이렇게하면 업로드 속도가 빨라집니다.

Heroku는 AWS에서 호스팅되기 때문에 S3 스트림은 매우 빠른 속도로 발생합니다. 지역에서 개발할 때이를 명심하십시오.

관련 문제