Wie kann ich den Speichermechanismus von Paperclip basierend auf der aktuellen Rails-Umgebung einstellen?

Ich habe eine rails-Anwendung, die mehrere Modelle mit Büroklammer für Anhänge, die alle auf S3 hochgeladen. Diese app hat auch eine große test-suite, die laufen ziemlich oft. Der Nachteil hierbei ist, dass eine Tonne von Dateien hochgeladen werden, um unseren S3-Konto auf jedem test ausgeführt werden, so dass die test-suite laufen langsam. Es verlangsamt sich auch die Entwicklung ein bisschen, und erfordert, dass Sie eine Internetverbindung haben, um am code zu arbeiten.

Gibt es eine vernünftige Möglichkeit, um die Büroklammer-Aufbewahrung-Mechanismus basiert auf der Rails-Umgebung? Im Idealfall, unseren test-und Entwicklungsumgebungen verwenden würden, das lokale Dateisystem, Speicher -, und Produktions-Umgebung verwenden würden, S3-Speicher.

Ich würde auch gerne zu extrahieren, diese Logik in ein gemeinsames Modul von einer Art, da haben wir einige Modelle, die dieses Verhalten. Ich möchte vermeiden, eine Lösung wie diese im inneren jedes Modells:

### 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 klebrige Teil ist, dass die Anlage :path und :url Optionen müssen, unterscheiden sich je nachdem, auf welche storage-system verwendet wird.

Jede Beratung oder Anregungen würde sehr geschätzt werden! 🙂

InformationsquelleAutor der Frage John Reilly | 2010-04-01

Schreibe einen Kommentar