Tengo una aplicación de rieles que tiene varios modelos con archivos adjuntos de sujetapapeles que están cargados en S3. Esta aplicación también tiene un gran conjunto de pruebas que se ejecuta con bastante frecuencia. La desventaja de esto es que una tonelada de archivos se cargan en nuestra cuenta S3 en cada ejecución de prueba, lo que hace que el banco de pruebas se ejecute lentamente. También ralentiza el desarrollo un poco, y requiere que tengas una conexión a Internet para trabajar en el código.¿Cómo puedo configurar el mecanismo de almacenamiento del clip en función del entorno actual de Rails?
¿Existe alguna manera razonable de configurar el mecanismo de almacenamiento de clips basado en el entorno Rails? Idealmente, nuestros entornos de prueba y desarrollo utilizarían el almacenamiento del sistema de archivos local, y el entorno de producción usaría el almacenamiento S3.
También me gustaría extraer esta lógica en un módulo compartido de algún tipo, ya que tenemos varios modelos que necesitarán este comportamiento. Me gustaría evitar una solución de este tipo en el interior de cada modelo:
### We don't want to do this in our models...
if Rails.env.production?
has_attached_file :image, :styles => {...},
:path => "images/:uuid_partition/:uuid/:style.:extension",
:storage => :s3,
:url => ':s3_authenticated_url', # generates an expiring url
:s3_credentials => File.join(Rails.root, 'config', 's3.yml'),
:s3_permissions => 'private',
:s3_protocol => 'https'
else
has_attached_file :image, :styles => {...},
:storage => :filesystem
# Default :path and :url should be used for dev/test envs.
end
Actualización: La parte adhesiva es que :path
y :url
opciones de la fijación tienen que ser diferentes dependiendo de qué sistema de almacenamiento se está utilizando.
¡Cualquier consejo o sugerencia sería muy apreciada! :-)
Buen trabajo. Sí, se necesitaba mucha más abstracción de la que proporcioné. :) –
Muy buen trabajo. Gracias. Realmente me ayudó. –
Estaba teniendo problemas con el método constante/hash mencionado anteriormente, pero esto funciona muy bien, y me gusta cómo puedo mantener toda mi lógica de clip en un solo lugar. ¡Gracias! – neezer