2009-10-26 18 views
9

큰 동적 생성 자산 호스팅과 Heroku에 대한 질문이 있습니다.Heroku : 로컬 파일 시스템없이 동적으로 생성 된 대규모 자산 처리

내 응용 프로그램은 기본 데이터의 하위 집합을 대량 다운로드하며, 24 시간마다 한 번씩 생성되는 큰 파일 (> 100MB)로 구성됩니다. 서버에서 실행 중이면 파일을 공개 디렉토리에 씁니다.

그러나 내가 이해하는 한, 이것은 Heroku에서는 불가능합니다./tmp 디렉토리는 쓸 수 있지만 파일의 보장 된 수명은 seems to be defined이며 백그라운드 작업이 아닌 하나의 요청 - 응답주기로 표시됩니다.

S3를 사용하여 다운로드 파일을 호스팅하고 싶습니다. S3 gem은 스트리밍 업로드를 지원하지만 로컬 파일 시스템에 이미있는 파일에 대해서만 지원합니다. 콘텐츠 크기를 미리 알아야 할 필요가있는 것처럼 보입니다. 내 경우에는 불가능합니다.

그래서 이것은 catch-22처럼 보입니다. S3에 업로드 할 때 메모리에 거대한 문자열을 작성하지 않으려 고하지만 S3는 로컬 파일 시스템에 이미 존재하는 파일의 스트리밍 업로드 만 지원합니다.

로컬 파일 시스템에 쓸 수없는 Rails 응용 프로그램을 사용하면 메모리에 큰 문자열을 만들지 않고 매일 생성되는 큰 파일을 어떻게 처리 할 수 ​​있습니까?

+0

나는 동일한 문제에 직면 해있다. 아직 태클을하지는 않았지만 delayed_job 작업자의/tmp 파일 시스템에 쓸 수 있다고 가정하고 있었고 S3에 파일을 업로드 할 수있을만큼 길었습니다. 사람들이 제안하는 것을 듣고 싶습니다! –

답변

10

${RAILS_ROOT}/tmp (안/tmp를,이 앱의 디렉토리에의) 프로세스의 기간 동안 지속됩니다. 백그라운드 DJ를 실행중인 경우 TMP의 파일은 해당 프로세스가 지속되는 동안 지속됩니다.

사실 파일은 더 오래 지속됩니다. 가용성을 보장 할 수 없다고 말하는 이유는 tmp가 서버간에 공유되지 않으며 각 작업/프로세스가 클라우드로드를 기반으로 다른 서버에서 실행될 수 있기 때문입니다. 또한 작업의 일부로 작업을 완료 한 후에도 파일을 삭제해야합니다.

- 다른 Heroku 직원

+0

@teich, 감사합니다. 고마워요! –

3

리치,

는 S3에 파일을 스트리밍 다음 ./tmp 할 파일을 작성하려고 했습니까?

-Blake Mizerany (Heroku가)

+0

@Blake, 위의 링크 된/tmp 디렉토리의 Heroku 문서가 (내가 말할 수있는 것에서 말하면) 디렉토리의 내용이 한 요청의 지속 기간 동안 존속하기 때문에 시도하지 않았습니다. 내가하고있는 일은 배경 직업의 맥락에서 일하게 될 것이고, 문제를 묻는 것처럼 보입니다. 내가 틀렸다면, 위대한 - 그게 문제를 해결할 것입니다. –