2009-08-11 14 views
5

Używam Paperclip i AWS-S3, co jest niesamowite. I działa świetnie. Tylko jeden problem: muszę przesłać naprawdę duże pliki. Jak w ponad 50 megabajtach. I tak umiera nginx. Więc najwyraźniej Paperclip przechowuje dane na dysku przed przejściem do S3?Paperclip, przesyłanie dużych plików i AWS

Znalazłem to really cool article, ale wydaje się, że najpierw będzie na dysku, a następnie robi wszystko inne w tle.

Idealnie byłoby móc przesłać plik w tle ... Mam niewielkie doświadczenie w tym zakresie z PHP, ale nic z Railsami jak na razie. Czy ktokolwiek mógłby wskazać mi w ogólnym kierunku, nawet?

Odpowiedz

5

Może musisz zwiększyć limit czasu w konfiguracjach ngix?

1

Możesz być zainteresowany w mój post tutaj:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

jej o przesyłanie wielu plików (z paski postępu, jednocześnie) bezpośrednio do S3 bez uderzania serwer.

+0

Dzięki za link! Jedyny problem, jaki widzę z tym, to to, że FancyUpload jest we Flashu, a flash musi załadować cały plik do pamięci przed rozpoczęciem przesyłania. Więc jeśli chciałbym przesłać plik o wielkości 300 MB, muszę mieć tyle pamięci RAM ... wszystkie testowane przeze mnie flashery spowodowały awarię Firefoksa i mam 4GB w moim komputerze. Jednak artykuł jest nadal interesujący i na pewno się z nim zwrócę później ... –

+0

To naprawdę niedogodność! Nie wiedziałem o tym. –

+2

Komentarz dotyczący Flasha ładowania całego pliku do pamięci przed przesłaniem nie jest już prawdą. Zmienili to na miejsce, w którym tylko buforuje to, czego potrzebuje teraz – iwasrobbed

5

można pominąć serwer całkowicie i przesłać bezpośrednio do S3, które będą zapobiegać timeout. To samo dzieje się na Heroku. Jeśli używasz szyny 3, proszę sprawdzić moje przykładowe projekty:

przykładowy projekt przy użyciu szyn 3, Flash i MooTools oparte FancyUploader przesłać bezpośrednio do S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-FancyUploader

przykładowy projekt za pomocą szyn 3 Flash/Silverlight/GoogleGears/BrowserPlus i Plupload jQuery oparte przesłać bezpośrednio do S3: https://github.com/iwasrobbed/Rails3-S3-Uploader-Plupload

Nawiasem mówiąc, można to zrobić post-processing z spinacza używając coś takiego blogu (który Nico napisał) opisuje:

http://www.railstoolkit.com/posts/fancyupload-amazon-s3-uploader-with-paperclip

0

Miałem podobny problem, ale przy użyciu spinacza, pasażera i apache.
Podobnie jak nginx, apache ma dyrektywę Timeout w Apache, którą zwiększyłem, aby rozwiązać mój problem.

Jest również interesująca rzecz, którą robi pasażer podczas przesyłania dużych plików.
Cokolwiek powyżej 8k jest zapisywane do/tmp/pasażer. a jeśli Apache nie ma uprawnień do pisania tam, dostaniesz 500 błędów również.

Oto artykuł.
http://tinyw.in/fwVB