Using Paperclip with S3 authenticated url
Für Channelthing ist es besonders wichtig, dass die hochgeladenen Dokumente, die wir bei S3 ablegen, nur durch authentifizierte Benutzer abgerufen werden können. Daher haben wir uns eine kleine Extension zu Paperclip gebaut, die solch eine verschlüsselte URL von S3 erhält, sobald ein Dokument, etc. angezeigt werden soll.
Dazu muss man zum einen den Bucket erstmal “sicher” machen. Mit der kleinen Firefox-Extension S3Fox Organizer. Man erlaubt nur dem Owner auf das Bucket zuzugreifen.
Unsere Extension erhält nur die Methode authenticated_s3_url die über die get_link Methode von dem s3-Objekt unsere URL mit einem Hash zurückgibt der nur über eine bestimmte Zeit aufgerufen werden kann. Die url-Methode von Paperclip überscheiben wir anschliessend.
module Railslove module Paperclip module SecureS3 def authenticated_s3_url(style = nil, include_updated_timestamp = true, time_limit = 15.minutes) url = original_filename.nil? ? interpolate(@default_url, style) : self.s3.interface.get_link(self.s3_bucket.to_s, self.path(style), time_limit) include_updated_timestamp && updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url end end end end Paperclip::Attachment.send(:include, Railslove::Paperclip::SecureS3) Paperclip::Attachment.class_eval("alias :url :authenticated_s3_url")
Man sollte daran denken auch die entsprechenden Rechte, jedem hochgeladenem Dokument zu setzen. Die können über den Parameter s3_permissions gesetzt werden:
paperclip:
storage: "s3"
s3_credentials: <%= "#{RAILS_ROOT}/config/s3.yml" %>
path: ":attachment/:id/:style.:extension"
bucket: "RailsloveLovesS3"
s3_permssions: "authenticated-read"Nun haben wir unser gewünschtes Ziel erreicht.
Kickstarting a Rails project #yai7d
Die ersten Tage der “Boswell” Entwicklung waren bereits sehr produktiv. Die User stories waren für das Projekt schnell geschrieben und die ersten Interface Skizzen gezeichnet. Ich denke wir werden diese bestimmt nochmal in einem eignen Post veröffentlichen, jetzt aber erstmal zum initialen Rails Setup.
Seit Version 2.3 werden ja Applikations-Templates unterstützt, die das Setup sehr einfach und schnell machen und die langweilige Installations-Arbeit abnehmen (siehe auch unseren Post von damals)
Auf Github hat Jeremy McAnally einige Templates gesammelt. Interessant sind auch die 54 forks des Projektes.
Für unsere Projekte – und eben für die 7 Tage “Boswell” App – haben wir unser eigenes Template:
Ein einfaches rails -m http://gist.github.com/raw/39969/d70e0ff89f59afbaad84593003db27349118bbac/railslove.rb MyNextMySpace macht dann folgendes:
- Git repository anlegen und .gitignore füllen
- Gem Abhänigkeiten erstellen für: factory_girl, shoulda, will_paginate, mocha
- Plugins installieren: find_by_param, redirect_love, serialize_fu, limerick_rake, hoptoad_notifier, restful-authentication, annotate_models
- unnötige Dateien wie die index.html löschen
- Initializer z.B. für E-Mail und Hoptoad Konfiguration erstellen
- und benötigte Resourcen generieren
und damit Happy Coding! ;)