2012-08-25 27 views
12

Ứng dụng tôi hiện đang lưu trữ trên Heroku cho phép người dùng gửi ảnh. Ban đầu, tôi đã suy nghĩ về việc lưu trữ những bức ảnh đó trên hệ thống tập tin, vì việc lưu trữ chúng trong cơ sở dữ liệu dường như là thực hành không tốt.Không có hệ thống tệp vĩnh viễn cho Heroku?

Tuy nhiên, có vẻ như không có hệ thống tệp vĩnh viễn trên Heroku, chỉ là một hệ thống tạm thời. Điều này có đúng không và, nếu có, tùy chọn của tôi liên quan đến lưu trữ ảnh và các tệp khác là gì?

Trả lời

18

Điều đó đúng. Heroku cho phép bạn tạo các ứng dụng đám mây, nhưng các ứng dụng đám mây đó không phải là "vĩnh viễn" - chúng là các cá thể (hoặc "sên") có thể được nhân bản nhiều lần trên EC2 của Amazon (đó là lý do tại sao nhân rộng dễ dàng với Heroku). Nếu bạn đã đẩy một phiên bản mới của ứng dụng của bạn, sau đó slug sẽ được biên dịch lại, và bất kỳ tập tin bạn đã lưu vào hệ thống tập tin trong trường hợp trước đó sẽ bị mất.

Đặt cược tốt nhất của bạn (dù là trên Heroku hay cách khác) là để lưu ảnh do người dùng gửi vào CDN. Vì bạn đang ở trên Heroku, và Heroku sử dụng AWS, tôi khuyên bạn nên sử dụng Amazon S3, với tùy chọn bật CloudFront.

Điều này mang lại lợi ích không chỉ vì nó vượt quá giới hạn "không giới hạn" của Heroku, mà còn vì CDN nhanh hơn nhiều và sẽ cung cấp dịch vụ webapp và trải nghiệm tốt hơn cho người dùng của bạn.

6

Tùy thuộc vào công nghệ bạn đang sử dụng, đặt cược tốt nhất của bạn có khả năng truyền tải video tải lên S3 (dịch vụ lưu trữ của Amazon). Bạn có thể tương tác với S3 với một thư viện khách hàng để làm cho nó đơn giản để đăng và truy xuất các tệp. Boto là một thư viện ứng dụng ví dụ cho Python - chúng tồn tại cho tất cả các ngôn ngữ phổ biến.

Một điều khác cần lưu ý là hệ thống tệp Heroku không được chia sẻ. Điều này có nghĩa là bạn sẽ phải đưa tập tin đó vào S3 với cùng một ứng dụng như một ứng dụng xử lý việc tải lên (thay vì nói, một quy trình công nhân). Nếu bạn có thể, hãy thử tải tải lên vào bộ nhớ, không bao giờ ghi nó vào đĩa và đăng trực tiếp lên S3. Điều này sẽ làm tăng tốc độ tải lên của bạn.

Do Heroku được lưu trữ trên AWS, các luồng đến S3 xảy ra ở tốc độ rất cao. Hãy ghi nhớ điều đó khi bạn phát triển tại địa phương.

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