2012-01-11 27 views
7

Hero3'te barındırılan raylarımda S3'te saklanan bir dosyayı göndermem gerekiyor. S3'daki dosyanın URL'sine bir yönlendirme kullanamıyorum çünkü içeriğindeki bağlantılarla aynı etki alanından sunulması gereken bir site haritası göndermek istiyorum.Proxy, Hero3 ve Rails ile S3'ten bir dosya

İdeal olarak, raylar uygulaması tarafından dosyayı göndermek için bir çeşit proxy yöntemi kullanırdım, en azından, dosyayı heroku'nun tmp dizinine indirip sonra gönderebilirim.

Ayrıca, dosya için doğru içerik türünü de gönderirim.

Bunu nasıl başarabilirim biliyor musunuz? En iyi yol ne olacak?

Orada bunu yaparken bir raf uygulaması ama, Raylar bunu çoğaltmak kodu Yardımlarınız için here

Teşekkür görmek için emin değilim

+0

siz "dosya göndermek" ile ne demek istiyorsunuz? Kime gönderiyorsun? Bir kullanıcının indirmesine izin veriyor musunuz yoksa Heroku uygulamanız aracılığıyla indirmek için başka bir hizmet için bir vekil olarak mı çalışıyorsunuz? – iwasrobbed

+1

Başka bir servisin (S3) Heroku uygulamasından indirmesi için bir vekil olarak hareket etmek istiyorum. –

+0

Heroku'nun 30 saniyelik bir istek zaman aşımı süresi vardır, bu yüzden bir Heroku sunucusunu bir proxy olarak güvenilir bir şekilde kullanabileceğinizden emin değilim. – iwasrobbed

cevap

3

Bu şuna benzer:

blob = AWS::S3::S3Object.value(filename, bucketname) 
send_data(blob, 
      { :type => 'image/jpg, 
      :disposition => 'inline' }) 

tip görüntü/jpg, görüntü/gif olabilir vb

+0

Bu bir olasılık ama eğer mümkünse bir çeşit akış bulmayı tercih ederim. Ayrıca, dosya S3'te depolanmış olsa bile, genel bir URL üzerindedir, bu yüzden dosyayı almak için S3 kitaplığını kullanmam gerekmiyor, dosyayı S3 lib'den veya doğrudan almak için bir neden olup olmadığından emin değilsiniz. URL ile –

+0

de, s3 url'ye yönlendirmek istemiyorsanız, raylar uygulaması doğrudan resme sunmalıdır. Render: text => proc {} yapısını kullanarak aktarabiliyor olabilirsiniz, ancak bir cache alıyorsanız (vernik veya memcache) sadece s3'ten alıp göndermek, makul bir çözümdür. – elijah

+0

Dosyayı işlemek için render: text => proc {} 'ifadesini nasıl kullanacağımı bilmiyorum. Ayrıca içeriği/türü dinamik olarak S3'teki dosyadan ayarlamak istiyorum. Bununla ilgili bir fikrin var mı? Yardımlarınız için teşekkürler. –