2012-06-28 42 views
11

Ứng dụng khá cơ bản của tôi cho phép người dùng tải lên hình đại diện.Sau khi git push heroku - các tệp đã tải lên trên Heroku bị mất

Ứng dụng này được triển khai để Heroku với

$ git add . 
$ git commit -m "description" 
$ git checkout master 
$ git merge my-cool-new-feature 
$ git push heroku 

Vấn đề là, mỗi khi tôi đẩy thay đổi Heroku, tất cả các file được tải lên Heroku bị mất. Tôi nghĩ, vấn đề là thư mục/tệp đã được kiểm soát phiên bản, vì vậy tôi đã thêm thư mục vào .gitignore

# Ignore User generated files 
/public/system/* 

và xóa tệp khỏi kho.

$ git rm -rf --cached public/system 

Nhưng sự cố vẫn tiếp diễn. Bạn có thể chỉ cho mình hướng chính xác được không?

Trả lời

26

Lý do là vì Heroku giới hạn cách bạn có thể lưu trữ dữ liệu trên máy chủ của họ. Quay lại số ngày bamboo, storing any data was simply impossible mà không cần sử dụng dịch vụ bên ngoài. Vì họ đã giới thiệu ngăn xếp Cedar, things have changed a little bit, nhưng vẫn không thể lưu trữ dữ liệu liên tục.

Như bạn đã phát hiện, mỗi khi bạn đẩy một thay đổi mới vào ứng dụng Heroku của bạn (hoặc mỗi lần ứng dụng tắt và khởi động lại sau khi không hoạt động trong x phút), ứng dụng của bạn được tạo lại và tất cả dữ liệu đã lưu bị mất.

Đặt cược của bạn tốt nhất là không sử dụng thư mục/công ở tất cả, và bắt đầu sử dụng một dịch vụ bên ngoài như Amazon S3, Rackspace Cloud Files hoặc Spideroack

+1

Cảm ơn câu trả lời. Kể từ khi nội dung cơ sở dữ liệu ở lại, tôi đã cai trị việc đặt lại. Và tôi không thể tìm thấy bất cứ điều gì về điều đó trong Herokus "Bắt đầu" -documents. Người ta có thể nghĩ rằng các nhà phát triển muốn thông tin đó là các câu hỏi thường gặp. Cảm ơn một lần nữa! –

+3

Vâng, cơ sở dữ liệu và truy cập tập tin là hai điều khác nhau. Heroku phải hỗ trợ một số loại lưu trữ liên tục hoặc hoàn toàn vô dụng cho các nhà phát triển để nhanh chóng khởi chạy một ứng dụng chức năng, vì vậy họ cung cấp cho bạn quyền truy cập vào một cá thể postgreSQL được chia sẻ, nhưng không bao gồm quyền truy cập bộ nhớ tệp. – JeanMertz

1

file của bạn sẽ bị mất với tất cả các triển khai. Giải pháp ưa thích của tôi là sử dụng Paperclip và một thùng Amazon. Kẹp giấy sẽ lưu trữ hình ảnh của bạn trong thùng để nó có thể được tham chiếu theo ý muốn từ ứng dụng.

1

Nếu ứng dụng của bạn cần nhận tệp do người dùng tải lên, bạn cần đảm bảo các video tải lên này được lưu trữ ở vị trí trung tâm và bền vững.

Với hệ thống tệp tạm thời của Heroku, mọi thông tin được ghi vào hệ thống tệp của dyno sẽ bị mất khi khởi động lại dyno. Thay vào đó, Heroku đề xuất các dịch vụ sao lưu. Đối với lưu trữ tệp và phương tiện, Amazon’s Simple Storage Service (S3) là một giải pháp tuyệt vời.

Bạn có thể muốn đọc arcticle này trên trang web Heroku: Uploading Files to S3 in Ruby with Paperclip

+0

Để biết thêm về cách sử dụng AWS S3 trên Heroku: [Sử dụng AWS S3 để lưu trữ nội dung tĩnh và tệp tải lên] (https://devcenter.heroku.com/articles/s3) –

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