Einträge tagged mit “rails”

DNS Probleme bei RubyForge.org

Jeder Rails Entwickler kennt RubyForge - und jeder der gerade Gems installieren möchte, wird folgendes Problem festgestellt haben:
ERROR:  While executing gem ... (Gem::RemoteSourceException)
Error fetching remote gem cache: SocketError: getaddrinfo: no address associated with hostname. (http://gems.rubyforge.org/yaml)

PDF und HTML mit acts_as_flying_saucer

Nutzer lieben Webanwendungen, die PDF-Dateien erzeugen. PDFs sind wie sauber ausgefüllte Papierformulare und Nutzer können sie ausdrucken, abheften, mit in ein Meeting nehmen, ... Kurz: Nutzer können weiter so arbeiten wie vor der Webanwendung, nur irgendwie moderner. Und genau das lieben sie.

Entwickler lieben Einfachheit und wollen Aufwände gern gering halten. Mit CSS muss man sich ja in jedem Falle auseinandersetzen. Wie wäre es, auch PDFs über CSS zu gestalten, nur eben mit Seitenzahlen, Kopf- und Fusszeile, ...

In unserem Artikel JRuby on Rails PDF Generierung haben wir schon vorgestellt, wie man einzelne Partials in PDFs bringen kann. Nun zeigen wir, wie eine normale Rails-Action einfach statt Anwendungs-HTML eine PDF-Datei erzeugt.

Ruby on Rails 3 bald als Beta verfügbar

Rails 3 ist die Verschmelzung von Rails und Merb (im Dezember 2008 angekündigt). Die Rails-Entwickler haben vor allem die schnelleren Teile des Merb-Frameworks integriert. (Performance in Rails 3 )
Weitere Neuerungen sind eine verbesserte Modularität, die Unterstützung für die JavaScript-Bibliothek jQuery und eine einfachere Routing-API, um die Webanwendungen auf Basis der REST-Architektur besser zu unterstützen. Die Entwicklung und Integration von Plugins wird vereinfacht und die Anwendung soll besser gegen Cross-Site-Scripting-Attacken (XSS) geschützt sein.

Die erste Beta von Rails 3 könnte schon im Februar erscheinen.

Interessant wird das Zusammenspiel von JRuby mit Rails 3. Die ersten Performance-Messungen von Yehuda Katz zeigen ein sehr erfreuliches Bild. Performance Messungen Rails 3 mit unterschiedlichen Implementationen (EngineYard Blog) (Bildquelle: Performance in Rails 3 )

Update: Mittlerweile ist die Beta tatsächlich draußen (zur Meldung). Sie ist natürlich noch nicht perfekt, aber um einen Eindruck vom neuen Framework zu bekommen und den Entwicklern erste Reaktionen zukommen zu lassen, reicht sie vollkommen aus. My Five Favorite Things About Rails 3
Rails 3 im Rails-Blog
Blog-Eintrag über Rails 3 von Yehuda Katz
Rails 3.0 Beta: 36 Links and Resources To Get You Going
Railscast #200 Rails 3 Beta and RVM
RVM - Ruby Version Manager

Observer in Migration ausschalten

Vor einiger Zeit erwähnten wir die Komplikationen, die auftreten können, wenn man Migrationen in Rails mit den realen Modellen der Anwendung durchführt. Um Validierungen, before_update-Methoden und ähnliches während der Migration auszuschalten, ist es oft günstig, der Migration eine eigene Version des Models zu geben.
Dazu noch ein Tipp:
Mit Model.delete_observers können Observer, welche am Model lauschen, entfernt werden. Da die Observer vom eigentlichen Model unabhängig sind, ist während der Migration nicht garantiert, dass die Observer problemlos arbeiten können.

GlassFish-Gem 1.0.0

Das GlassFish-Gem von Vivek Pandey ist in der Version 1.0.0 erschienen.

Neuerungen sind neben einigen BugFixes:
  1. die Implementierung mittels des neu erschienen Glassfish v3 Servers
  2. die Startzeit wurde um ca. 15% verbessert
  3. die Unterstützung von Rack (Ruby Webserver Interface) ist komplett
  4. es ist möglich, Glassfish mittels eines Codeblockes auszuführen
    GlassFish::Server.start(:address=>"127.0.0.1", :port=>4000) do
     use Rack::CommonLogger
     use Rack::ShowExceptions
     map "/hello" do
     use Rack::Lint
     run Proc.new {[200, {"Content-Type" => "text/html"}, "Hello"]}
     end
    end
    
  5. der Sinatra-Support wurde verbessert
  6. auf der Kommandozeile kann die IP Adresse mitgegeben werden
  7. die Konfiguration von Grizzly (NIO based HTTP Lib) kann mittels der glassfish.yml festgelegt werden
  8. man findet es nun auch bei GemCutter
Was ist eigentlich das GlassFish-Gem?

Einführung ins Test Driven Development

Nicht erst mit dem Bekannterwerden von Rails erfreuen sich Unit-Tests und insbesondere das Test Driven Development immer größerer Beliebtheit. Rails bringt bereits viel Funktionalität mit, damit das Testen von Models, Controllern und Views sehr vereinfacht wird.

Rails 2.3.5, JRuby und Java

Es ist viel passiert in der letzten Zeit! JRuby ist in der Version 1.4 erschienen. Rails kommt mit einem neuen Bugfix-Release 2.3.5, in dem es auch mittels des RailsXss-Plugins von Michael Koziarski einen Vorgeschmack auf die kommende Rails 3 Version gibt.

Wer etwas mehr über die Vorträge zur ersten JRuby-Konferenz erfahren will, kann sich bei ruby-mine informieren.

Die JRuby-Entwickler Nick Sieger, Charles Nutter und Thomas Enebo schreiben auf dem Engine Yard Blog weiterhin interessante Artikel.

RubyMine 2.0 veröffentlicht

Seit der ersten Veröffentlichung von RubyMine arbeiten wir mit dieser coolen IDE und sind sehr zufrieden. Seit einigen Wochen konnten wir nun schon Beta-Versionen des neuen Releases testen und können sagen, dass JetBrains hier nochmal richtig gute Erweiterungen geschaffen hat: Oft verwendete Ruby- und Rails-Techniken wie HAML, RSpec, Cucumber und die Rails-I18n-API werden direkt von der IDE unterstützt und die Editoren wissen noch mehr über den Aufbau der Rails-Projekte, sodass viele neue Refactorings und Code Inspections möglich wurden. Außerdem wurde die JRuby-Unterstützung verbessert - so lassen sich nun zum Beispiel auch unter Windows die gestarteten Server ohne den Umweg über den Task-Manager beenden.

Die Arbeit mit den Betas machte schon Spaß, das fertige Release freut uns um so mehr.
Zum Download geht es hier.

JRuby Anwendungen kundenspezifisch anpassen

Branding und Customizing einer JRuby on Rails Anwendung

Wenn man Rails-Anwendungen für Kunden betreibt, muss man frühzeitig an kundenspezifische Anpassungen denken. Neben dem kundenspezifischen Design (Farben und Logos aus dem Corporate Design, "Branding") spielen dabei auch konfigurierbare Feature-Sets ("Customizing") eine wichtige Rolle. Natürlich wird jeder Kunde sowohl seine eigene Datenbank bekommen als auch seinen eigenen Rails-Server: Sicherheit geht vor!
ObjectTime Branding BlueObjectTime Branding Orange
Jedoch will man als Entwickler nicht deswegen mehrere Kopien des Quelltextes auf dem aktuellen Stand halten müssen. In diesem Artikel wollen wir unser Branding-Konzept am Beispiel unserer Zeiterfassung ObjectTime vorstellen. An den Stellen, wo wir es einsetzen, hat es sich bereits ausgezahlt.

View-Helper mit Kommentaren

Heute mal ein Bericht von einer Merkwürdigkeit, über die wir soeben gestolpert sind:
<% my_helper do #comment %>
 <div>Text</div>
 <%= function() %>
<% end %>
my_helper ist ein normaler Helper - in unserem Fall sollte er sich den Code nehmen und auf der Webseite als Text anzeigen, was auch klappte. Nur im Produktivsystem war lediglich die Ausgabe von function() zu sehen. Wieso?

Was hier falsch ist, ist der Kommentar direkt nach dem do. RubyMine zeigt zwar eine korrekte Syntax und auf meinem localhost-System funktioniert es auch. Warum es nur produktiv nicht klappte, bleibt ein Rätsel, wir konnten bisher nur rausfinden, dass es nicht an der Environment liegt.

Statische Migrationen, flexible Anwendung

Da wir unsere Projekte meist im Team bearbeiten, standen wir schon öfter vor folgendem Problem:
Ein Entwickler startet ein neues Projekt und legt das Model User an. Da das Projekt am Anfang steht, hat der User erst mal nur ein Login. In der Migration wird auch gleich ein "admin"-User angelegt. Ein paar Tage später wird entschieden, dass beim User auch Vor- und Nachname benötigt werden. Also legt der Entwickler eine Migration an, die dem User diese Felder hinzufügt und das User-Model erhält Validierungen, damit die Vor- und Nachnamen auch befüllt werden.

Nun kommt ein zweiter Entwickler zum Projekt hinzu. Er checkt die Sourcen frisch aus und will seine Entwicklungs-DB migrieren. Schon die erste Migration schlägt fehl, da diese den "admin"-User ohne Vor- und Nachnamen anlegen will. Auch später im Produktivsystem funktioniert diese Migration nicht mehr.
Noch spannender wird es, wenn im Laufe der Zeit durch ein Refactoring ein Model ganz entfernt wurde. Alle vorangehenden Migrationen, die irgendwie auf die Klasse zugreifen wollen, schlagen fehl. Kurzum: Die Anwendung entwickelt sich dynamisch, während die Migrationen zum jeweiligen Anwendungsstand in Stein gemeißelt werden.

Fehler in AJAX-Request anzeigen

Während der Entwicklung tritt bei dem ein oder anderen Entwickler doch mal ein Fehler auf, auf den uns Rails mit einem Exception-Text und dem Stacktrace hinweist. So lassen sich die Fehler meist schnell finden und beseitigen. Im produktiven Einsatz sollte sowas zwar nicht mehr passieren, aber falls doch, wird mittels des Status-Codes 500 auf den internen Fehler hingewiesen und das Log mit der Exception gefüllt.

Doch was ist, wenn so ein Fehler in Mitten eines AJAX-Aufrufs passiert? Dann bleibt der Request auf dem Server hängen und der Browser erhält nie eine Antwort. Der Nutzer (egal ob Entwickler oder Endanwender) erhält keine Rückmeldung.

Aktuelles von der RailsWayCon

Vom 25. Mai bis zum 27. Mai sind wir in Berlin zur RailsWayCon. Die Konferenz hält einige interessante Vorträge und Workshops bereit. Mal sehen was für Neuigkeiten und Ideen wir mitnehmen können.

Unter http://railsmagazin.de/railswaycon-in-6-minuten-1411 findet man auch ein cooles Video mit Eindrücken der RailsWayCon.

RailsWayCon 2009 in Berlin

Viele von Euch haben sicherlich schon eine Ausgabe des RailsWay Magazins in den Händen gehabt und die interessanten Ruby, JRuby und Rails Artikel gelesen.

Die Macher des Magazins stehen auch hinter der ersten RailsWay Konferenz. Die RailsWayCon 2009 findet vom 25. - 27. Mai in Berlin statt. In der aktuellen Ausgabe des Magazins und auf www.railswayconference.com kann man sich die beeindruckende Liste der internationalen Referenten und Vortragsthemen ansehen. Wir sind gespannt, welche Neuigkeiten und coole Erfahrungen uns dort begegnen.

RailsWayCon 2009 in Berlin

JRuby on Rails PDF Generierung

Viele Rails-Entwickler werden früher oder später auch einmal PDF-Dateien aus einer Anwendung heraus erzeugen wollen. Dafür gibt es viele denkbare Ansätze: angefangen von PDF::Writer über Prawn bis hin zu kommerziellen Produkten. (Ein Beispiel für PDF-Generierung mit Prawn findet man Ryan Bates Railscasts). Was uns an den meisten dieser Ansätze stört, ist der Aufwand, der mit dem neuen Layout für die PDF-Datei verbunden ist. Warum kann nicht auch hier eines der Grundprinzipien von Rails gelten - DRY (Don't Repeat Yourself)!
Unser Ziel war, bestimmte Bereiche der Rails-Views als Partials zu erzeugen, um genau diese Partials auch im PDF verwenden zu können -> Don't Repeat Yourself

Dank JRuby ist die Lösung dafür nicht schwer. In JRuby stehen uns ja neben den Ruby- und Rails-Bibliotheken auch die Vielfalt und Breite der Java Welt zur Verfügung. In dem Artikel Generating PDFs for Fun and Profit with Flying Saucer and iText wird an mehreren Beispielen sehr gut erläutert, wie man PDFs mittels Java erzeugt.

Durch die Java-Bibliothek iText und das "Flying Saucer"-Projekt ist man in der Lage, XML und CSS zu rendern und als PDF auszugeben. iText ist eine Java Bibliothek zum "on the fly" Generieren von PDF-Dateien. Sie benötigt mindestens JDK 1.4 und ist frei erhältlich. Das "Flying Saucer"-Projekt stellt einen XML/CSS Renderer zur Verfügung, der einen XML-Input mittels CSS formatiert und daraus eine Darstellung als Bild-, PDF- oder Bildschirmausgabe erstellt.

Das Ganze muss nun also nur noch in eine Rails-Anwendung eingebettet werden. Auf geht's!

Rails API Doc elegant durchsuchen

Auf http://railsapi.com/ stellt Vladimir Kolesnikov's eine weitere sehr gut durchdachte Suchmöglichkeit der Rails API Dokumentation zur Verfügung. Mittels eines integrierten Eingabefeldes werden die Klassen und Modulen schon während der Eingabe gefiltert und erleichtern so die Suche nach der gewünschten Funktion.

Die Suche-Filterung ist sehr intelligent gehalten. So werden zuerst die Treffer angezeigt, die mit dem exakten Suchwort am Anfang beginnen. Anschließend folgen die Treffer, bei denen das exakte Suchwort irgendwo im Wort enthalten ist und zum Schluss findet das sogenannte "smart match" seine Anwendung. Hier werden Treffer angezeigt, bei denen die Zeichen des Suchwortes wenigsten in der richtigen Reihenfolge im Trefferwort vorhanden sind. Es können also andere Zeichen dazwischen liegen.

Eine sehr gelungene Erleichterung beim Durchwühlen der API. Vor allem, weil man die Anwendung auch herunterladen und lokal benutzen kann.

JRuby 1.2.0 und Rails 2.3.2 erschienen

Die JRuby- und Rails-Welt ist zur Zeit in ständiger Bewegung. Aktuell ist die Rails-Version 2.3.2 mit vielen Neuerungen erschienen:
  • Rack-Eingliederung ist abgeschlossen
  • Rails-Engine wurde verbessert
  • die Dokumentationen in den Rails-Guides wurden erweitert
  • Ruby 1.9.1 wird unterstützt
  • ActiveRecord, ActionControler, ActiveSupport und ActionView wurden mit neuen coolen Features ausgestattet
  • neu sind Rails Metal, Application Templates
  • und vieles mehr

Auch beim JRuby-Team ist man fleißig gewesen. Die Version 1.2.0 ist seit gestern vorhanden. Es wurde wieder an der Performance-Schraube gedreht (Das Parsing soll bis zu 6 Mal schneller sein.), die Arbeit an der Ruby 1.9 Unterstützung ist abgeschlossen und viele viele Fehler wurden ausgebügelt.

Es wird immer besser! JRuby 1.2.0 Released
JRuby
Ruby on Rails 2.3 Release Notes
Rails 2.3: Templates, Engines, Rack, Metal, much more!
Introducing Rails Metal
Rails Inside

JRails: Rails mit JQuery

Standardmäßig wird Rails mit der Prototype Javascript-Bibliothek und der Effekt-Bibliothek Scriptaculous ausgeliefert. Das Zusammenspiel der Ajax-Rails-Methoden (z.B. link_to_remote, observe_field ...) funktioniert auch hervorragend. Doch immer öfter fällt mir die Javascript-Bibliothek JQuery auf. Sei es auf anderen Seiten oder in Tutorials, es kommt mir so vor, als ob JQuery so langsam die Vorreiterrolle übernimmt. Wie kann man nun JQuery in Rails benutzen, ohne auf die hilfreichen Rails Methoden verzichten zu müssen.
1