2009-10-26 20 views
9

Dinamik olarak üretilen büyük varlıklar ve Heroku ile ilgili bir sorum var.Heroku: Yerel Bir Dosya Sistemi Olmadan Büyük Dinamik Olarak Üretilmiş Öğeler Sunma

Uygulamam, her 24 saatte bir oluşturulan büyük bir dosyadan (> 100 MB) oluşan altta yatan verilerin bir alt kümesini toplu olarak indirecek. Bir sunucuda çalışıyor olsaydım, dosyayı genel dizine yazardım.

Ama anladığım kadarıyla, bu Heroku ile mümkün değil./Tmp dizini, bir arka plan işi için değil, bir istek-yanıt döngüsü açısından seems to be defined dosyalarının garantili ömürleri için yazılabilir.

İndirme dosyasını barındırmak için S3'ü kullanmak istiyorum. S3 gem, aktarım yüklemelerini destekliyor, ancak yalnızca yerel dosya sisteminde zaten var olan dosyalar için. İçerik boyutunun bilinmesi gerektiği gibi görünüyor, bu da benim durumumda mümkün olmayacak.

Yani bu bir catch-22'ye benziyor. S3'e yüklerken bellekte devasa bir dize oluşturmamaya çalışıyorum, ancak S3 sadece yerel dosya sisteminde zaten var olan dosyalar için akış yüklemelerini destekliyor.

Yerel dosya sistemine yazamadığım bir Rails uygulaması verildiğinde, bellekte büyük bir dize oluşturmadan günlük olarak oluşturulan büyük bir dosyaya nasıl hizmet edebilirim?

+0

Aynı sorunla karşı karşıyayım. Henüz ele almadım ama gecikmiş işçimdeki/tmp dosya sistemine yazabileceğimi ve dosyanın S3'e yüklenmesini sağlayacak kadar uzun süre çalışacağını varsayıyordum. İnsanların önerdiği şeyleri duymak ister! –

cevap

10

${RAILS_ROOT}/tmp (değil/tmp, bu uygulamanızın dizinine yerleştirmek) süreciniz boyunca sürer. Bir arka plan DJ'i çalıştırıyorsanız, TMP'deki dosyalar bu işlemin süresi boyunca devam eder.

Aslında, dosyalar daha uzun sürecek, kullanılabilirliği garanti edemediğimizin nedeni, tmp'nin sunucular arasında paylaşılmaması ve her işin/işlemin bulut yüküne bağlı olarak farklı bir sunucuda çalışabilmesidir. Ayrıca, işinizin bir parçası olarak işiniz bittiğinde dosyalarınızı silmeniz gerektiğinden emin olmanız gerekir.

-Another Heroku çalışanı

+0

@teich, bu çok anlamlı! –

3

Zengin,

Eğer S3 dosya aktarımı sonra ./tmp dosyayı yazma denediniz mi?

-Blake Mizerany (Heroku)

+0

@Blake, Denemedim, çünkü/tmp dizinindeki Heroku belgelerine (yukarıda anlatabildiğim), bir isteğin süresi boyunca dizinin içeriğinin geçerliliğini koruduğunu söylüyor. Yaptığım şey, sorun isteyen bir arka plan işi bağlamında olurdu. Eğer yanılıyorsam, o zaman harika - sorunu çözecek. –

İlgili konular