Ich habe eine Rails-Anwendung mit mehreren Modellen mit Büroklammeranhängen, die alle in S3 hochgeladen werden. Diese App hat auch eine große Testsuite, die ziemlich oft ausgeführt wird. Der Nachteil dabei ist, dass bei jedem Testlauf eine Menge Dateien auf unser S3-Konto hochgeladen werden, wodurch die Testsuite langsam ausgeführt wird. Es verlangsamt auch die Entwicklung ein wenig und erfordert eine Internetverbindung, um an dem Code arbeiten zu können.
Gibt es eine vernünftige Möglichkeit, den Büroklammer-Speichermechanismus basierend auf der Rails-Umgebung festzulegen? Im Idealfall verwenden unsere Test- und Entwicklungsumgebungen den lokalen Dateisystemspeicher und die Produktionsumgebung S3-Speicher.
Ich möchte diese Logik auch in ein gemeinsames Modul extrahieren, da wir mehrere Modelle haben, die dieses Verhalten benötigen. Ich möchte eine solche Lösung in jedem Modell vermeiden:
### 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
Update: Der entscheidende Teil ist, dass die Anhänge :path
und :url
Optionen je nach verwendetem Speichersystem unterschiedlich sein müssen.
Jeder Rat oder Anregungen wäre sehr dankbar! :-)