2012-01-11 31 views
7

Tôi cần gửi tệp được lưu trữ trong S3 thông qua ứng dụng đường ray được lưu trữ trên heroku. Tôi không thể sử dụng chuyển hướng đến URL của tập tin trên S3 vì tôi muốn gửi một sơ đồ trang web sẽ được phân phát từ cùng miền với các liên kết bên trong. Lý tưởng nhất, tôi sẽ sử dụng một số loại phương thức proxy để gửi tệp bằng ứng dụng đường ray, ít nhất, tôi có thể tải xuống tệp trong thư mục tmp của heroku và gửi nó sau đó.Proxy một tệp từ S3 với Heroku và Rails

Tôi cũng sẽ gửi đúng loại nội dung cho tệp.

Bạn có biết làm thế nào tôi có thể đạt được nó? Điều gì sẽ là cách tốt nhất?

Có một ứng dụng giá đỡ được làm điều đó nhưng tôi không chắc chắn làm thế nào để tái tạo nó trong Rails, xem mã here

Nhờ sự giúp đỡ của bạn

+0

Bạn có ý gì khi "gửi tệp"? Bạn gửi nó cho ai? Bạn có cho phép người dùng tải xuống hoặc bạn đang hoạt động như một proxy cho một dịch vụ khác để tải xuống thông qua ứng dụng Heroku của bạn? – iwasrobbed

+1

Tôi muốn hoạt động như một proxy cho một dịch vụ khác (S3) để tải xuống thông qua ứng dụng Heroku của tôi. –

+0

Heroku có thời gian chờ yêu cầu là 30 giây nên tôi không chắc chắn bạn có thể sử dụng máy chủ Heroku một cách đáng tin cậy làm proxy. – iwasrobbed

Trả lời

3

Nó trông như thế này:

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

loại có thể là hình ảnh/jpg, hình ảnh/gif, v.v.

+0

Đây là một khả năng nhưng tôi muốn tìm một số loại phát trực tuyến nếu có thể. Ngoài ra, ngay cả khi các tập tin được lưu trữ trên S3, nó là trên một URL công cộng vì vậy tôi không cần phải sử dụng thư viện S3 để có được tập tin, không chắc chắn nếu có lý do để chọn để có được các tập tin từ S3 lib hoặc trực tiếp bởi URL? –

+0

, nếu bạn không muốn chuyển hướng đến url s3, ứng dụng đường ray sẽ phải trực tiếp phục vụ hình ảnh. Bạn có thể stream nó bằng cách sử dụng render: text => proc {} nhưng nếu bạn nhận được cache (varnish hoặc memcache) chỉ cần kéo nó từ s3 và gửi nó cùng là một giải pháp hợp lý. – elijah

+0

Tôi không chắc chắn cách sử dụng 'render: text => proc {}' để truyền tệp. Ngoài ra, tôi muốn đặt nội dung/kiểu động từ tệp trên S3. Bạn có một số ý tưởng với điều đó? Cảm ơn sự giúp đỡ của bạn. –

Các vấn đề liên quan