2012-09-14 42 views
45

Tôi đang sử dụng Python/Django trên Heroku (Cedar Stack) và tôi đã có một lệnh quản lý mà tôi cần viết để kéo tệp ra khỏi thùng S3 và xử lý nó. Tôi không chắc tôi hiểu cách sử dụng hệ thống tệp tạm thời. Chỉ có một số thư mục có thể ghi được không? Tôi tìm thấy một bài viết khác ngụ ý rằng chỉ có một số thư mục có thể ghi được (nhưng, nó dường như không áp dụng cho ngăn xếp Cedar). Tôi tìm thấy dev này article nhưng nó không đi vào chi tiết nhiều (lưu ý: Tôi hiểu rằng nó chỉ là tạm thời. Tôi chỉ cần giải nén tệp và xử lý tệp). Tôi có thể tạo một thư mục ở bất cứ đâu dưới gốc của ứng dụng không? Và làm thế nào tôi có được điều đó? Có vẻ như tôi có thể chỉ cần sử dụng $ HOME. Tôi đã làm một chút thử nghiệm bằng cách kết nối quaLàm thế nào để sử dụng hệ thống tập tin tạm thời của heroku

$ heroku run bash 

và chạy:

$ echo #HOME 

lợi nhuận:

/app

và chạy:

$ mkdir $HOME/tmp 

tạo một thư mục trong th e gốc của ứng dụng và cung cấp cùng một người dùng và nhóm với các tệp và thư mục khác.

... Vì vậy, bất cứ điều gì tôi đang thiếu ở đây? Một cách tốt hơn để làm điều đó? Có một biến môi trường hệ điều hành cho điều này? Tôi đã chạy "env" và tôi không thấy cái nào tốt hơn.

+3

Lưu ý rằng, bất cứ khi nào bạn thực hiện 'Heroku run', này quay lên mới [one-off Dyno] (https://devcenter.heroku.com/articles/one-off-dynos) trên Heroku rằng * sẽ tính phí *. Bạn có thể kiểm tra trạng thái của dynos của bạn sau đó thông qua 'heroku ps' để xem họ có đang chạy hay không. Khi sử dụng 'bash' heroku chạy, dyno được gắn với thiết bị đầu cuối của bạn, tức là nó sẽ dừng khi bạn đóng phiên đầu cuối (ví dụ: với Ctrl + C). Hơn nữa, dyno một lần không có quyền truy cập vào các tệp từ dynos khác của bạn được viết vào thời gian chạy, vì vậy 'ls' v.v. sẽ không hoạt động để xem những gì trên các dynos khác của bạn (ngoại trừ các tệp ứng dụng của bạn). – caw

+5

@MarcoW. Tôi muốn làm nổi bật imporatnce của bình luận của bạn! Điều này là không rõ ràng rằng 'heroku run' quay lên một dyno mới. Đã cho tôi một thời gian để hiểu lý do tại sao tôi không thể truy cập thông qua HTTP các tập tin được tạo thông qua kiểm tra echo 'heroku run '> /app/web/test.html" '...Nó chỉ ra họ đang tạo ra tại một lần dyno và không bao giờ phải đối mặt với web ... –

Trả lời

47

Bạn có thể tạo tệp trong thư mục '/ tmp' và tệp đó sẽ bị hủy sau khi yêu cầu hoàn tất. Tôi đang làm điều này trên Cedar, và tôi đã không có bất kỳ vấn đề.

+4

trong thực tế, bất cứ nơi nào có thể ghi trên stack tuyết tùng -/tmp chỉ đã trở lại từ những ngày Bamboo. Bạn sẽ mất bất cứ thứ gì được tải lên mặc dù khi dyno được khởi động lại/thu nhỏ… –

+1

Trong trường hợp nó hữu ích cho người khác - tôi phải tạo một thư mục có tên "tmp" trong thư mục gốc của tôi. Khi tôi lần đầu tiên đi qua câu trả lời này nó có vẻ như thể có lẽ tmp đã tồn tại như một phần của Heroku - trong trường hợp của tôi, tôi tạo ra các thư mục. – Dan

67

Để thực sự hiểu hệ thống tệp tạm thời, bạn cần phải hiểu dyno là gì. Bạn có thể đọc thêm về how dynos work. Tóm lại, tuy nhiên, một quá trình chạy trên Heroku trong một máy ảo với hệ thống tập tin riêng của mình. Máy ảo đó có thể dừng lại vì một số lý do, lấy hệ thống tập tin cùng với nó.

Hệ thống tệp cơ bản sẽ bị hủy khi khởi động lại ứng dụng, được định cấu hình lại (ví dụ: heroku config ...), được chia tỷ lệ, v.v. Ví dụ: nếu bạn có hai dynos web, hãy ghi một số tệp vào hệ thống tệp tạm thời và chia tỷ lệ thành ba dynos những tệp đó sẽ bị hủy vì ứng dụng của bạn đang chạy trên dynos mới.

Nói chung, hệ thống tệp tạm thời hoạt động giống như bất kỳ hệ thống tệp nào. Các thư mục bạn có quyền ghi vào, chẳng hạn như $HOME/tmp, bạn có thể ghi tệp vào. Bất kỳ tập tin yêu cầu vĩnh viễn nên được ghi vào S3, hoặc một cửa hàng bền tương tự. S3 được ưu tiên như Heroku chạy trên AWS và S3 cung cấp một số lợi thế về hiệu năng. Bất kỳ tập tin có thể được tái tạo theo ý muốn có thể được lưu trữ trên cửa hàng phù du của Dyno.

+1

"S3 được ưu tiên như Heroku chạy trên AWS và S3 cung cấp một số lợi thế hiệu suất" - Tốt để biết! ! : D @Naaman – Despertaweb

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