ASCIIcasts

Die Screencasts von Ryan Bates, die wir euch jede Woche vorstellen, sind sehr beliegt. Eifion Bedford ist genauso begeistert von den Screencasts und hat einen großen Teil des Portfolios von railscasts.com in eine „Plain-Version“ umgewandelt. D.h. er hat die Videos in eine ASCII Version umgewandelt, damit diese einfacher zu durchsuchen sind.

Nachdem er mit den ersten Screencasts angefangen hatte, ist ihm klar geworden, dass die Community eher an den neueren Videos interessiert ist. Daher gibt es einen Versionssprung in der Liste der verfügbaren Ascii-Casts und es sind auch noch nicht alle Videos „konvertiert“ worden.

Dies ist die Liste der verfügbaren Ascii-Casts:

Screencast: MongoDB und MongoMapper

MongoDB ist eine dokumenten-orientierte Datenbank. In dieser Woche zeigt Ryan wie MongoMapper benutzt werden kann, um auf MongoDB zuzugreifen.

Download

Download (24.1 MB, 13:13)
Alternativer download für iPod & Apple TV (15.3 MB, 13:13)

 

Resourcen:

Quellcode:

[bash]
rails todo
sudo rake gems:install
script/generate nifty_layout
script/generate nifty_scaffold project name:string –skip-migration
script/generate nifty_scaffold task project_id:string name:string completed:boolean –skip-migration
[/bash]

[ruby]
# config/environment.rb
config.gem "mongo_mapper"

# config/initializers/mongo_config.rb
MongoMapper.database = "todo-#{Rails.env}"

# models/project.rb
class Project
include MongoMapper::Document

key :name, String, :required => true
key :priority, Integer

many :tasks
end

# models/task.rb
class Task
include MongoMapper::Document

key :project_id, ObjectId
key :name, String
key :completed, Boolean

belongs_to :project
end

# script/console
Project.all
Project.all(:order => "name")
Project.all(:priority => 3)
Project.all(:priority.gte => 2)
Project.all(:priority.in => [2, 3])
[/ruby]

[html]
<!– projects/_form.html.erb –>
<p>
<%= f.label :priority %><br />
<%= f.select :priority, [1,2,3,4,5] %>
</p>

<!– tasks/_form.html.erb –>
<p>
<%= f.label :project_id %><br />
<%= f.collection_select :project_id, Project.all, :id, :name %>
</p>
[/html]

Routes in Rails 3

Rails 3 ist bekanntermaßen eine Verschmelzung von Rails und Merb. Viele Anpassungen werden auch „nach Aussen sichtbar“ sein, aber die meisten Veränderungen werden im Rails-Kern stattfinden. In Rails 3 wird auch das Routing angepasst bzw. (wieder) neu geschrieben. Die Routen wurden in der Vergangheit häufiger angepasst und mit jeder Version wurden sie schneller und brachten mehr Flexibilität. Auch die neue Version macht keine Ausnahme und bringt mit der neuen DSL ein paar Verbesserungen mit.

Die neue DSL ist insgesamt sauberer aufgebaut. Eine typische RESTful Route in Rails 3 könnte folgendermaßen Aussehen:

[ruby]
resources :products do
resource :category

member do
post :short
end

collection do
get :long
end
end
[/ruby]

So würde die es z.Z. in Rails 2 aussehen:

[ruby]
map.resources :products, :member =&gt; {:short =&gt; :post}, :collection =&gt; {:long =&gt; :get} do |products|
products.resource :category
end
[/ruby]

Wie man sieht ist die neue Schreibform viel lesbarer und somit einfacher zu pflegen.

Im folgenden werden wir verschiedene Beispiele für die unterschiedlichen Route-Typen  in Rails 3 zeigen

 

Default Route

Die Default Route in Rails 3 ist nun explizieter und die Klammern verdeutlichen die optionalen Parameter:

[ruby]
match ‚/:controller(/:action(/:id))‘
[/ruby]

Reguläre Routen

Anstatt verschiedene Parameter anzugeben, kann man nun die Angaben „zusammenfassen“ ("catalog#view„):

[ruby]
match ‚products/:id‘ =&gt; ‚catalog#view‘
[/ruby]

Das Vereinfacht die Routenerstellung. Die Beispielroute wie sie heute geschrieben werden würde:

[ruby]
map.connect ‚products/:id‘, :controller =&gt; ‚catalog‘, :action =&gt; ‚view‘
[/ruby]

Named Routen

Die Unterscheidung zwischen regulären und named Routen ist schwieriger im Vergleich zu Rails 2. Der einzige Unterschied ist, dass bei regulären Routen im ersten Argument ein Parameter zu finden ist.

[ruby]
match ‚logout‘, :to =&gt; ’sessions#destroy‘
[/ruby]

Auch in diesem Fall ist die neue Version sauberer und lesbarer als in Rails 2:
[ruby]
map.logout ‚/logout‘, :controller =&gt; ’sessions‘, :action =&gt; ‚destroy‘
[/ruby]

Leere Route

Die Startseite einer Rails-App wird durch eine „leere“ Route konfiguriert. Bereits in der jetzigen Form gibt eine Kurzschreibform dafür:

[ruby]
map.root :controller =&gt; "welcome", :action =&gt; ’show‘
[/ruby]

Dies wird nochmal mehr vereinfacht und kann folgendermaßen geschrieben werden:

[ruby]
root :to =&gt; ‚welcome#show‘
[/ruby]

RESTful Routen

RESTful Routen ist die default- und bevorzugte Variante seit Rails 2.

Eine typische RESTful Route wird noch einfacher zu konfigurieren sein:

[ruby]
resources :products
[/ruby]

Diese Zeile würde alle benötigten Routen generieren. Genau wie in der jetzigen Version lassen sich mehrere Routen in einer Zeile definieren.

 

Weitere RESTful Actions

Weitere RESTful Actions lassen sich auf verschiedene Art und Weise implementieren:

[ruby]
resources :products do
collection do
get :sold
post :on_offer
end
end
[/ruby]

Die Action läßt sich auch folgendermaßen schreiben:

[ruby]
resources :products do
get :sold, :on =&gt; :collection
end
[/ruby]

Die erste Variante ist besser wenn mehr als eine Action konfiguriert werden muss.

 

Nested Resources

In Rails 2 wurden nested Resources in einem Block definiert oder durch die Verwendung von :has_many oder :has_one Schlüssel.

Beide Version werden nun durch die Blockversion ersetzt:

[ruby]
resources :projects do
resources :tasks, :people
end
[/ruby]

Namespaced Resources

Diese sind nützlich wenn Resoucen in einem (Unter-)Verzeichnis liegen und sie lassen sich einfach konfigurieren:

[ruby]
namespace :admin do
resources :projects
end
[/ruby]

Die Neugestaltung der Routes in Rails 3 sieht viel versprechend aus und wird mit großer Sicherheit die Arbeit vereinfachen. Wir hoffen dieser Artikel wird euch beim Umstieg helfen.

 

Dieser Beitrag ist angelehnt an den Blogeintrag von Rizwan Reza

…wieder ein Jahr vergangen

Liebe Leserinnen und Leser!

Das rubyonrails.de-Team wünscht euch eine schöne (und vielleicht auch sogar weiße) Weihnachtszeit!
Wenn man zurückblickt, kommt einem die Zeit immer wie ein kurzer Augenblick vor.

Da hat das Jahr gerade angefangen, schon neigt es sich wieder dem Ende zu und das Weihnachtsfest steht vor der Tür.

Auch für uns war 2009 ein spannendes Jahr und wir sind noch gespannter auf das nächste Rails Release. Es dürfte nicht mehr lange dauern bis es veröffentlicht wird…

Viele Grüße und ein erholsames Fest wünscht euch das rubyonrails.de-Team

Screencast: Model ohne DB-Tabelle

Ein Model muss nicht zwingend eine Datenbank Tabelle referenzieren. Um dies umzusetzen müssen lediglich ein paar Methoden angelegt werden. Welche das sind zeigt Ryan Bates in seinem dieswöchigen Screencast.

Download:
Download (14.8 MB, 8:28)
Alternativer Download für iPod & Apple TV (10.4 MB, 8:28)

Resourcen:

Quellcode:

[bash]
script/generate nifty_scaffold recommendation from_email:string to_email:string article_id:integer message:text new create
rake db:migrate
rake db:rollback
rm db/migrate/*_recommendations.rb
[/bash]

[ruby]
# models/recommendation.rb
class Recommendation < ActiveRecord::Base
def self.columns() @columns ||= []; end

def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end

column :from_email, :string
column :to_email, :string
column :article_id, :integer
column :message, :text

validates_format_of :from_email, :to_email, :with => /^[-a-z0-9_+.]+@([-a-z0-9]+.)+[a-z0-9]{2,4}$/i
validates_length_of :message, :maximum => 500

belongs_to :article
end

# recommendations_controller.rb
def new
@recommendation = Recommendation.new(:article_id => params[:article_id])
end

def create
@recommendation = Recommendation.new(params[:recommendation])
if @recommendation.valid?
# send email
flash[:notice] = "Successfully created recommendation."
redirect_to root_url
else
render :action => ’new‘
end
end
[/ruby]

Freies eBook: Ruby on Rails Tutorial

Michael Hartl hat ein freies Ruby on Rails eBook veröffentlicht und stellt es auf seiner Seite zum Download zur Verfügung. Die ersten vier Kapitel sind bereits fertig und weitere sollen in kürze folgen.

Den aktuellen Stand könnt ihr unter http://www.railstutorial.org/book einsehen oder auf der gleichen Seite als PDF runterladen um es offline zu lesen.

Das Buch behandelt momentan Rails 2.3.4 und zusätzlich einen breiten Themenbereich rund um das Framework.

Sobald Rails 3 erscheint soll das Buch aktualisiert werden um den neuesten Stand zu representieren.

Weier Infos:

Hauptseite: http://www.railstutorial.org

Buchseite: http://www.railstutorial.org/book

PDF-Version: http://www.railstutorial.org/book/ruby-on-rails-tutorial-book.pdf

Netbeans 6.8 mit verbessertem Rails Support

Sun Microsystems hat ihre freie IDE Netbeans in der Version 6.8 veröffentlicht. Diese Version bringt verbesserten Ruby und Rails Support mit und soll somit die Entwicklung vereinfachen/unterstützen. Neben der verbesserten Unterstützung gibt es in diesem Release auch viele neue Features.

Zu den neuen Features gehören mitunter:

  • das interne JRuby wurde auf die Version 1.4 aktualisiert
  • Ruby 1.9 Debugging wird nun unterstützt
  • Scripte lassen sich nun mit zusätzlichen Argumenten starten
  • Unterstützung für das Debuggen von Dateien die nicht direkt in das Projekt eingebunden sind
  • Verbesserungen im Refactoring
  • RSpec 1.2.9 Support
  • Navigieren in AR-Associations
  • Möglichkeit Argumente für Rails-Server zu spezifizieren
  • und vieles mehr

Weitere Details sind auf der Projektseite zu finden: http://netbeans.org/

Die IDE lässt sich unter folgendem Link runterladen: http://netbeans.org/downloads/

Phusion Passenger 2.2.8 veröffentlicht

Trotz der Ankündigung, dass es vor dem nächsten großen Release keine weitere Version geben sollte (*), hat das Passenger-Team heute eine weitere Version von Phusion-Passenger veröffentlicht. In dieser Version sind keine neuen Features hinzugekommen, denn es ist ein reines Bugfix-Release.

Alle Details zu den Bugfixes sind auf der Seite von diesem Release zu finden: Passenger

Das Update kann über die bekannten Wege über gem durchgeführt werden.

[bash]
gem install passenger

# wenn der Zielserver Apache ist:
passenger-install-apache2-module

# wenn der Zielserver nginx ist:
passenger-install-nginx-module
[/bash]

(*) Phusion Passenger 2.2.6 veröffentlicht: http://blog.phusion.nl/2009/12/16/phusion-passenger-2-2-8-released/

Distributed Programming with Ruby

“A must have title for the well-rounded Ruby programmer building advanced Rails applications and large systems!”

OBIE FERNANDEZ, Series Editor

Complete, Hands-On Guide to Building Advanced Distributed Applications with Ruby
Distributed programming techniques make applications easier to scale, develop, and deploy—especially in emerging cloud computing environments. Now, one of the Ruby community’s leading experts has written the first definitive guide to distributed programming with Ruby.

Mark Bates begins with a simple distributed application, and then walks through an increasingly complex series of examples, demonstrating solutions to the most common distributed programming problems.

Bates presents the industry’s most useful coverage of Ruby’s standard distributed programming libraries, DRb and Rinda. Next, he introduces powerful third-party tools, frameworks, and libraries designed to simplify Ruby distributed programming, including his own Distribunaut.

If you’re an experienced Ruby programmer or architect, this hands-on tutorial and practical reference will help you meet any distributed programming challenge, no matter how complex.

Coverage includes

•   Writing robust, secure, and interactive applications using DRb—and managing its drawbacks

•   Using Rinda to build applications with improved flexibility, fault tolerance, and service discovery

•   Simplifying DRb service management with RingyDingy

•   Utilizing Starfish to facilitate communication between distributed programs and to write MapReduce functions for processing

large data sets

•   Using Politics to customize the processes running on individual server instances in a cloud computing environment

•   Providing reliable distributed queuing with the low-overhead Starling messaging server

•   Implementing comprehensive enterprise messaging with RabbitMQ and Advanced Message Queuing Protocol (AMQP)

•   Offloading heavyweight tasks with BackgrounDRb and DelayedJob