Continious integration mit Hudson und Integrity
Continious Integration ist ein wichtiger Bestandteil von Software, vor allem wenn mehrere Beteiligte am Projekt Teilnehmen. Nach jedem Push wird dann der aktuelle Code vom CI-System ausgecheckt und die gewünschten rake-Tasks ausgeführt. Neben dem schon bekannten CrusieControll.rb gibt es noch zwei andere interesannte Cnotinious Integration Tools die ich kurz vorstellen möchte: Integrity und Hudson.
Integrity
Integrity ist sehr einfach gestrickt. Nach der relativ simplen installation kann man verschiedene Projekte hinzufügen. Der einzige “overhead” der noch ensteht, ist das zusammenstellen eines rake-tasks den Integrity nach jedem pull ausführt. Dieser einfacher rake-Task kann als Einstieg dienen:
Nach jedem Build können die Entwickler auch über die zu verfügung stehenden Notifier (Email, Campfire, IRC, …) über den Stand informiert werden. Weiterhin gibt es auch ein Growl-Plugin und Dashboard-Widget. Der Build der Applikation wird über Github via einem POST-Webhook zu Integrity angetriggert.
Der einzige Nachteil ist, dass bei lang-andauernden Builds der entsprechende Webserver einen Timeout erreicht. Der kann natürlich hochgesetzt werden.
Hudson
Hudson ist eine weitere Alternative. Es ist ein Java-Basiertes CI-System und wird out-of-the-box mit einem Webserver ausgeliefert. Entsprechende Debian-Packages gibt es hier. Hudson bietet gegenüber Integrity mehr Konfigurationsmöglichkeiten, daher dauert es ein bisschen länger bis man sein neues CI-System am laufen hat. Meet-Hudson bietet eine gute Übersicht über Hudson.
Der oben schon vorgestellte Rake-Task kann ebenfalls für Hudson verwendet werden. Allerdings müssen Plugins für eine Rake- und Githubunterstützung installiert werden (Git-Plugin und Rake-Plugin).
Bei Hudson ist der initiale Konfigurationsaufwand zwar geringer als bei Integrity, dafür müssen viele Plugins installiert und konfiguriert werden um seine “perfekte” CI-Umgebung ans laufen zu bekommen. Unschön an Hudson ist die fehlende unterstützung des triggern eines Builds über einen POST-Webhook. Stattdessen kann dies nur über ein GET getriggert, was aber seitens Github nicht unterstützt wird. Eine Alternative ist das periodische abprüfen von Änderungen in der Repository.
What to expect at RailsWayCon 2009
From Gate 21 @ Cologne-Bonn-Airport. Nun ist es soweit: 2/3 Railslove ist auf dem Weg zur RailsWayCon (unseren dritten Mann erwarten wir heute Abend vor Ort). Wir schauen uns gerade noch mal das spannende Timetable an und die Themen hören sich mehr als interessant an.
Tag 1: Workshop
Am Montag werden zwei Workshops angeboten: Behaviour-driven Design in Practice und Deploying Ruby on Rails Applications. Der BDD Workshop behandelt unter anderem Themen wie RSpec, Cucumber, Mocking, Stubbing und vieles mehr.
Tag 2 und 3: Sessions
Von verschiedenen Speakern erwarten uns spannende Themen rund um das Thema Ruby On Rails und Web Development. Angefangen bei asynchroner Verarbeitung von Daten in Ruby, über Haml und Sass, CouchDB und user centered design bis hin zu Themen wie Metaprogramming und Hacking Ruby On Rails und RoR in the Enterprise.
Wir sind auf jeden Fall sehr, sehr gespannt und können die nächsten drei Tage kaum erwarten.
Und jetzt, ab in den Flieger! Berlin wir kommen!
DevHouseFriday mit Gary Vaynerchuk, Yehuda Katz und Scotland on Rails
Es hat uns wieder mal sehr gefreut, dass gestern das DevHouseFriday so zahlreich besucht wurde. Wir hatten diesmal aber auch sehr spezielle Gäste zu Besuch, u.a. Yehuda Katz, einer der Core Team Member der Rails- und Merb-Projekte. Im Live-Webcast von Oreilly “What to expect in Rails 3.0″ erzählte Yehuda .. tja, was in Rails 3.0 zu erwarten ist. Durch die leider nicht ideale Audioverbindung werden wir uns allerdings das Video noch einmal aus dem Archiv der Oreilly Webcasts laden müssen, um dann genauer über die Zukunft von Rails zu berichten. *hehe* :D
Nach der interessanten Stunde über Rails, galt “Freestyle” im Office: jedes cooles Video bekam eine Chance. Bumi präsentierte als nächstes “Getting Git: Getting Effective Project Management” von Mr. S. Chacon GIT (GitHub). Für alle, die wirklich mit Git durchstarten wollen und die rasante Präsentation mit ca. 150 Folien in gefühlten 15 Minuten verkraften können, ist dieses Video ein Muss.
Mein Lieblingsvideo war schließlich als drittes dran: Im Themengebiet “Business” referierte Gary Vaynerchuk auf der Web 2.0 Expo in New York über “Building Personal Brand Within the Social Media Landscape”. Ein sehr gelungener Vortrag über die Leidenschaft zur Arbeit, die 80-Std. Woche und dem machen-auf–was-man-Lust-hat. Alles unter dem Motto: “What do I want to do everyday for the rest of my live - do that”. 15 Minuten Motivationstraining versprochen.
Zum Schluss gab’s noch eine Runde RailsWay Magazine für alle Teilnehmer, da wir als Mediasponsor der bevorstehenden RailsWayCon dankenswerterweise einen guten Schwung im Briefkasten fanden. Und wo wir schon bei der RailsWayCon sind: Berlin wir kommen! Tim, Bumi und ich fliegen morgen in die Hauptstadt und freuen uns dort auf ein paar spannende Tage - nicht nur auf der Konferenz!
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.
Der Start in eine neue #yai7d-Woche: “Boswell”
Es hat nicht lange gedauert bis wir unseren ersten Kandidaten für die “Your app in 7 days”-Aktion gefunden haben: Mr. X möchte “Boswell” entwickeln - wenn das mal nicht spannend klingt! Leider können wir diesmal bis zum Launch keine weiteren Details über das konkrete Produkt berichten, aber die ersten Berichte über die technische Umsetzung sind bereits in Planung.
… jetzt aber ran ans Werk!



