J'ai une application rails qui a plusieurs modèles avec un trombone, des pièces jointes qui sont tous téléchargée sur S3. Cette application dispose également d'une grande suite de test qui est exécuté assez souvent. L'inconvénient de ceci est que une tonne de fichiers sont téléchargés dans notre S3 compte sur chaque série de tests, faisant de la suite de tests de courir lentement. Il ralentit aussi le développement un peu, et vous oblige à avoir une connexion internet pour travailler sur le code.
Est-il raisonnable de façon à définir la forme de trombone mécanisme de stockage basé sur les Rails de l'environnement? Idéalement, notre test et les environnements de développement serait d'utiliser le système de fichiers local de stockage, et de l'environnement de production serait de l'utiliser de stockage S3.
Je tiens également à extraire de cette logique dans un module partagé d'une certaine sorte, puisque nous avons plusieurs modèles qui auront besoin de ce comportement. Je voudrais éviter une solution à ceci à l'intérieur de chaque modèle:
### 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
Mise à jour: Le collant, c'est que la pièce jointe :path
et :url
des options diffèrent selon le système de stockage est utilisé.
Tous les conseils ou suggestions seraient grandement appréciés! :-)