Was ist der beste Ansatz, um große Datei-Uploads in einer Rails-App zu verarbeiten?
Ich bin daran interessiert, das Verständnis der verschiedenen Ansätze zum Umgang mit großen Datei-uploads in einer Rails-Applikation, 2-5Gb-Dateien.
Ich verstehe, dass, um eine Datei zu übertragen, in dieser Größe wird es brauchen, um herunter gebrochen werden in kleinere Teile, ich habe einige der Forschung getan und hier ist, was ich habe, so weit.
- Server-side-config wird benötigt, um die übernahme von großen POST-Anfragen und wohl auch eine 64bit Maschine zu handhaben alles über 4Gb.
- AWS unterstützt multipart upload.
- HTML5 FileSystemAPI hat eine hartnäckige uploader den Upload der Datei in Blöcken.
- Eine Bibliothek für Bitorrent obwohl dies erfordert eine übertragung Kunden, die nicht ideal
Können alle diese Methoden wieder aufgenommen werden, wie FTP, der Grund, warum ich nicht wollen, Sie FTP verwenden, ist, dass ich will, dass in der web-app ist dies möglich? Ich habe verwendet, carrierwave und Büroklammer, aber ich bin auf der Suche nach etwas, das in der Lage wieder aufgenommen werden, wie das hochladen einer 5 GB-Datei dauert einige Zeit!
Dieser Ansätze, die ich aufgezählt habe, möchte ich undertand, was gut funktioniert hat und wenn es andere Ansätze, die ich möglicherweise fehlt? Keine plugins, wenn möglich, lieber nicht verwenden Java-Applets oder Flash. Ein weiteres Problem ist, dass diese Lösungen halten Sie die Datei in den Arbeitsspeicher beim hochladen, das ist auch eine Einschränkung würde ich eher vermeiden, wenn möglich.
InformationsquelleAutor der Frage cih | 2013-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich mit diesem Thema umgegangen ist auf mehrere Standorte, mit ein paar der Techniken, die Sie haben in der oben gezeigten und ein paar, die Sie nicht haben. Die gute Nachricht ist, dass es eigentlich ziemlich realistisch, ermöglichen massive uploads.
Viel dies hängt davon ab, was Sie eigentlich Vorhaben zu tun, mit der Datei, nachdem Sie hochgeladen haben... je mehr Arbeit Sie zu tun haben, auf die Datei, desto näher sind Sie gehen zu wollen, es auf Ihren server. Wenn Sie tun müssen, um die sofortige Verarbeitung hochladen, werden Sie wahrscheinlich wollen, zu tun, eine Reine rails-Lösung. Wenn Sie nicht brauchen, zu tun, eine Verarbeitung, oder ist es nicht zeitkritisch ist, können Sie beginnen zu überlegen, "hybrid" - Lösungen...
Ob Sie es glauben oder nicht, ich habe tatsächlich hatte ziemlich viel Glück nur mit mod_porter. Mod_porter macht apache-tun ein Haufen Arbeit, dass die app normalerweise tun würde. Es hilft nicht binden, einen Faden und eine Reihe von Speicher während des Uploads. Dies resultiert in einer Datei lokal auf Ihrem app, zur einfachen Verarbeitung. Wenn Sie zahlen Aufmerksamkeit auf die Art und Weise der Verarbeitung der hochgeladenen Dateien (denken-streams), Sie können den gesamten Prozess nur sehr wenig Speicher, auch für das, was traditionell ziemlich kostspielig. Dieser Ansatz erfordert sehr wenig tatsächliche setup-app, um zu arbeiten, und keine wirkliche änderung, um Ihren code, aber es erfordert ein bestimmtes Umfeld (apache-server), sowie die Möglichkeit es zu konfigurieren.
Habe ich auch Glück gehabt mit jQuery-File-Upload, die unterstützt gute Sachen wie aufgeteilte und fortsetzbare uploads. Ohne so etwas wie mod_porter, kann dies noch binden einen ganzen thread der Ausführung beim hochladen, aber es sollte angemessen sein, auf den Speicher, wenn richtig gemacht. Dies führt auch in eine Datei, "schließen", und, als Folge, leicht zu verarbeiten. Dieser Ansatz wird Anpassungen erfordern, um Ihre view-Schicht zu implementieren und funktioniert nicht in allen Browsern.
Ihnen genannten FTP und bittorrent als mögliche Optionen. Diese sind nicht so schlechte Optionen wie man denken könnte, so können Sie dennoch die Dateien, die ziemlich nahe an den server. Sie sind auch nicht ausschließen, das ist schön, weil (wie gesagt) Sie erfordern eine zusätzliche client -, die kann oder kann nicht vorhanden sein, auf der hochladen-Maschine. Die Funktionsweise ist im Grunde genommen richten Sie einen Bereich für Sie zu dump, die sichtbar ist, indem Sie Ihre app. Dann, wenn Sie tun müssen, um eine Verarbeitung, die Sie einen cron-job (oder was auch immer) zu überwachen, dass die Lage für die hoch-und trigger Ihre Server-Verarbeitung-Methode. Dies nicht, erhalten Sie die sofortige Reaktion der oben genannten Methoden bieten kann, aber Sie können das Intervall klein genug, um ziemlich nah. Der einzige wirkliche Vorteil an dieser Methode ist, dass die verwendeten Protokolle sind besser geeignet für die übertragung großer Dateien, die zusätzliche client-Anforderung und fragmentierten Prozess in der Regel überwiegen die Vorteile von diesem, in meiner Erfahrung.
Wenn Sie nicht brauchen, jede Verarbeitung, Ihre beste Wette sein kann, um einfach nur geradeaus zu S3 mit Ihnen. Diese Lösung fällt die zweite, die Sie tatsächlich brauchen, etwas zu tun mit den Dateien, die andere als server Sie als die statischen Elemente....
Ich habe keine Erfahrung mit dem HTML5-FileSystemAPI in eine rails-app, so dass ich nicht sprechen kann, obwohl es scheint, dass es würde erheblich einschränken, die Kunden, die Sie in der Lage sind, zu unterstützen.
Leider gibt es kein echtes Silber Kugel - alle diese Optionen müssen abgewogen werden gegen Ihre Umgebung in dem Rahmen, was Sie versuchen zu erreichen. Sie sind möglicherweise nicht in der Lage, konfigurieren Sie Ihre web-server oder dauerhaft schreiben in das lokale Dateisystem, zum Beispiel. Für was es Wert ist, denke ich, dass jQuery-File-Upload ist wahrscheinlich Ihre beste Wette in den meisten Umgebungen, wie es nur wirklich erfordert änderungen an Ihrer Anwendung, so dass Sie sich bewegen könnte, eine Umsetzung in eine andere Umgebung am leichtesten.
InformationsquelleAutor der Antwort Brad Werth
http://www.jedi.be/blog/2009/04/10/rails-and-large-large-file-uploads-looking-at-the-alternatives/ hat einige gute Vergleiche der Optionen, darunter auch einige außerhalb der Schienen.
Bitte gehen Sie durch es.Es war hilfreich, in meinem Fall
Auch eine andere Website zu gehen:-
http://bclennox.com/extremely-large-file-uploads-with-nginx-passenger-rails-and-jquery
Bitte lassen Sie mich wissen, wenn einer das nicht klappt
InformationsquelleAutor der Antwort Catmandu
Diesem Projekt ist ein neues Protokoll über HTTP zu unterstützen fortsetzbar upload für große Dateien. Es bypass-Schienen, indem es seinen eigenen server.
http://tus.io/
InformationsquelleAutor der Antwort Bmxer
Ich würde by-pass der rails server und veröffentlichen Sie Ihre großen Dateien(aufgeteilt in chunks) direkt aus dem browser zu Amazon Simple Storage. Werfen Sie einen Blick auf diese post auf teilen von Dateien mit JavaScript. Ich bin ein wenig neugierig, wie performant diese Einrichtung wäre und ich fühle mich wie basteln mit diesem setup an diesem Wochenende.
InformationsquelleAutor der Antwort eabraham
Ich denke, dass Brad Werth genagelt die Antwort
nur ein Ansatz könnte sein, nutzen Sie den direkten upload auf S3 (und selbst wenn Sie tun müssen, einige der Wiederaufarbeitung nach könnte man theoretisch mithilfe von aws lambda informieren Sie Ihre app ... aber um ehrlich zu sein, ich bin hier nur raten, ich bin über dasselbe problem zu lösen mich, ich werde das später noch näher)
http://aws.amazon.com/articles/1434
wenn Sie carrierwave
InformationsquelleAutor der Antwort equivalent8