Desarrollo en iOS , y estoy cambiando de un backend PHP a Ruby on Rails. El formato de intercambio es JSON .
Una búsqueda rápida en Google para "guardar imágenes en Rails" tiene casi todos los resultados hablando de guardar datos de imágenes como blobs en la base de datos. Podría estar equivocado, pero tengo la impresión de que guardar datos de imagen en una base de datos es una gran pérdida de tiempo y espacio (en lugar de guardar un enlace a la ubicación del archivo ('/img/subcat/4656.png') .
En PHP, es bastante estándar recibir los datos, generar un nombre de archivo, guardar ese archivo en el disco y actualizar la base de datos con la ubicación de la imagen en el disco. ¿Es lo mismo para Ruby on Rails, o hay alguna funcionalidad de imagen ActiveRecord incorporada que no conozco?
fuente
Respuestas:
Lo que he hecho en el pasado es usar PaperClip con Amazon S3 y CloudFront CDN para una entrega más rápida. PaperClip admite el almacenamiento S3 de forma muy sencilla: consulte su documentación para ver las opciones de configuración de almacenamiento S3 .
s3_host_alias: assets.example.com
. Esto hará que las URL generadas en los recursos de imagen guardados utilicen su host de distribución de CloudFront.config.action_controller.asset_host = http://assets.example.com
. Las URL de activos de Ruby on Rails también usarán su distribución de CloudFront, para el almacenamiento en caché / entrega más rápida.Eso es bastante incompleto, pero es de esperar que te señale en la dirección de algunos recursos útiles. Por supuesto, esa es solo una solución, pero es una que me ha funcionado en una situación en la que estaba lidiando con cientos de miles de archivos adjuntos de imágenes en la base de datos.
(Como un posible paso avanzado que puede no ser necesario o útil para su caso, también puede configurar múltiples CNAME para su distribución de CloudFront, como
assets0.example.com
yassets1.example.com
. Ambos clipss3_host_alias
yaction_controller.asset_host
luego puede tomar lambdas que le permitirán determinar de manera determinista (según activo) genera URL que usan diferentes hosts, para una mejor paralelización si está descargando un montón de ellos en la misma página, ya que los navegadores limitarán las conexiones simultáneas máximas al mismo host).fuente
He probado varias gemas, pero ahora estoy usando FineUploader junto con PaperClip
FineUploader maneja una gran cantidad de la GUI para usted, por ejemplo, el progreso de carga, arrastrar y soltar y la carga de múltiples archivos, y así sucesivamente. Estoy usando PaperClip porque quiero almacenar las imágenes en mis servidores en lugar de en S3.
Lo que normalmente hacemos es buscar una solución configurable lista para usar estable en lugar de recrear cosas desde cero. Con PaperClip almaceno las imágenes y con StateMachine hago conversiones en las imágenes y las coloco en una categoría basada en el nombre del archivo. Tenía la misma pregunta que tenía, y esta fue mi mejor solución de trabajo, por eso la comparto.
fuente