Ich entwickle unter iOS und wechsle von einem PHP- Backend zu Ruby on Rails. Das Austauschformat ist JSON .
Bei einer schnellen Google-Suche nach "Bilder in Rails speichern" wird fast in jedem Ergebnis davon gesprochen, Bilddaten als Blobs in der Datenbank zu speichern. Ich könnte mich irren, aber ich habe den Eindruck, dass das Speichern von Bilddaten in einer Datenbank eine enorme Zeit- und Platzverschwendung darstellt (im Gegensatz zum Speichern eines Links zum Dateispeicherort ('/img/subcat/4656.png'). .
In PHP ist es ziemlich normal, die Daten zu empfangen, einen Dateinamen zu generieren, diese Datei auf der Festplatte zu speichern und die Datenbank mit dem Speicherort des Bildes auf der Festplatte zu aktualisieren. Ist dies auch bei Ruby on Rails der Fall oder gibt es einige integrierte ActiveRecord-Image-Funktionen, die mir nicht bekannt sind?
quelle
Antworten:
In der Vergangenheit habe ich PaperClip mit Amazon S3 und CloudFront CDN für eine schnellere Lieferung verwendet. PaperClip unterstützt S3-Speicher sofort sehr gut: Informationen zur Konfiguration des S3-Speichers finden Sie in der Dokumentation .
s3_host_alias: assets.example.com
. Dadurch werden generierte URLs zu gespeicherten Bildressourcen, um Ihren CloudFront-Distributionshost zu verwenden.config.action_controller.asset_host = http://assets.example.com
. Ruby on Rails-Asset-URLs verwenden dann auch Ihre CloudFront-Distribution für das Caching / die schnellere Bereitstellung.Das ist ziemlich lückenhaft, aber es weist Sie hoffentlich in Richtung einiger nützlicher Ressourcen. Natürlich ist das nur eine Lösung, aber es hat für mich in einer Situation funktioniert, in der ich mit Hunderttausenden von Bildanhängen in der Datenbank zu tun hatte.
(Als möglicher fortgeschrittener Schritt, der für Ihren Fall möglicherweise nicht erforderlich oder nützlich ist, können Sie auch mehrere CNAMEs für Ihre CloudFront-Distribution einrichten, z. B.
assets0.example.com
undassets1.example.com
. Beide Büroklammerns3_host_alias
undaction_controller.asset_host
dann Lambdas, mit denen Sie deterministisch (basierend auf dem Asset) Generieren Sie URLs, die unterschiedliche Hosts verwenden, um eine bessere Parallelisierung zu erzielen, wenn Sie eine Reihe von Hosts auf derselben Seite herunterladen, da Browser die maximale Anzahl gleichzeitiger Verbindungen zu demselben Host begrenzen.)quelle
Ich habe mehrere Edelsteine ausprobiert, aber jetzt verwende ich FineUploader zusammen mit PaperClip
FineUploader verwaltet einen Großteil der GUI für Sie, z. B. den Upload-Fortschritt, das Ziehen und Ablegen sowie das Hochladen mehrerer Dateien usw. Ich verwende PaperClip, weil ich die Bilder auf meinen Servern anstatt auf S3 speichern möchte.
Normalerweise suchen wir nach einer stabilen, sofort einsatzbereiten, konfigurierbaren Lösung, anstatt die Daten von Grund auf neu zu erstellen. Mit PaperClip speichere ich die Bilder und mit einer StateMachine konvertiere ich die Bilder und ordne sie in eine Kategorie ein, die auf dem Dateinamen basiert. Ich hatte die gleiche Frage, die Sie hatten, und dies war meine am besten funktionierende Lösung. Deshalb teile ich sie.
quelle