Rails 2.0 Preview Release

Gestern (30.09.07) hat David das Preview Release zu Rails 2.0 veröffentlicht.

Dies ist die erste Vorabversion, der wahrscheinlich noch ein, zwei und ggf. drei Release Candidates folgen werden.

Bevor die endgültige Version erscheint soll es noch ein 1.2.4’er Version geben. Diese wird einige Bugfixes und aktualisierte Warnung über veraltete/abgelöste Bereiche enthalten. So soll sichergestellt werden, dass jeder seine Applikation auf den aktuellsten Stand bringen kann, bevor sie auf die neue Version umgestellt wird.

Neuerungen in Version 2.0 werden sein:

Action Pack: Resources

Mit dem ActionPack Resources rückt man dem RESTful lifestyle ein wenig näher.
Eines der auffälligeren Veränderungen sind die geänderten URLs. Das Semikolon wurde wurde gegen ein Slash ausgetauscht.

Also aus ”/people/1;edit” wird nun ”/people/1/edit”.

Weiterhin kann man nun Namespaces verwenden. Somit wird es einfacher z.B. Admin-Interfaces abzubilden.

Ansonsten wurde eine Konvention für das Routing eingeführt. Per Default werden nun Resourcen im Plural angegeben.

Action Pack: Multiview:

Neben dem bereits bekannten respond_to können nun Rückgabe-Formate und der Renderer im Template-Namen angegeben werden:
..
Beispiele:

show.erb: ist das show-Template für alle Formate

index.atom.builder: Hier wird das Builderformat benutzt. In der 1.x.x-Version wurde hier die Endung .rxml benutzt. Der Mimetype ist in diesem Fall “application/atom+xml”

edit.iphone.haml: Hier würde die HAML Template Engine benutzt werden (Diese müsste vorher installiert werden), und es wird das angepasste Mime::IPHONE-Format zurückgegeben.

Action Pack: Record identification:

Weitere Konventionen sollen nun die Addressierung von Resourcen vereinfachen z.B:

redirect_to(person)

link_to(person.name, person)

form_for(person)

Action Pack: HTTP Loving:

Mit der 2.0 Version rückt Rails zum HTTP-Protokoll ein bisschen näher. So wird man ganz einfach HTTP Basic Authentications durchführen können.

Weiterhin kann nun Javascript- und CSS-Dateien cachen können.
z.B. würden mit javascript_include_tag(:all, :cache => true) würde alle eingebundene Dateien zu einer “public/javascripts/all.js” zusammengefasst werden. auf diese Weise kann man weiterhin bei der Entwicklung separate Dateien benutzen und hat trotzdem in Produktion den Vorteil, dass der Browser nur eine Datei anzufordern braucht.

Action Pack: Security:

Rails 2.0 beinhaltet einige Vorkehrungen um mit CRSF und XSS Attacken zu unterbinden.

Action Pack: Exception Handling:

Die Fehlerbehandlung ist nun um die Möglichkeit klassen basierte Behandlungen zu erstellen erweitert worden.

Action Pack: Miscellaneous:

Eine weitere Erweiterung ist der neue AtomFeedHelper um auf einfache Weise seine eigenen Feeds zu erstellen

Active Record: Performance:

Ein Query-Cache der bereits abgesetzte Abfragen für spätere Anfragen speichert, soll die Verarbeitung von Requests beschleunigen.

Active Record: Sexy Migrations:

Tabellen-Spalten vom gleichen Typ können nun in den Migrationsscripten zusammengefasst werden. Dadurch sollen die Scripte mehr DRY werden.

Active Record: Shedding some weight:

Um Active Record ein bisschen schlanker zu machen wurden Teile wie acts_as_XYZ in Plugins ausgelagert. Wenn diese Funktionen benutzt wurden/werden kann man sie einfach mit ./script/plugin install acts_as_XYZ nachinstallieren.

Weiterhin beinhaltet die Standardinstallation nur die DB-Adapter für die freuen Datenbanken MySQL, SQLite und PostgreSQL. Die Adapter für die kommerziellen Datenbanken sind in gem-Pakete ausgelagert worden und können nach der Installation weiterhin benutzt werden.

Active Record: with_scope with a dash of syntactic vinegar:

Um unbeabsichtigten Missbrauch (Verwendung außerhalb von Models) von :with_scope vorzubeugen wurde diese Funktion so umgestellt, dass sie nur noch innerhalb von Models aufgerufen werden kann. Wenn man es weiterhin außerhalb aufrufen möchte oder muss, kann man die send(:with_scope) des Obejkt benutzen.

ActionWebService out, ActiveResource in:

Wie schon seit längerer Zeit abzusehen hat man sich gegen klassische Webservices über SOAP entschieden und stattdessen sich für den REST-Ansatz entschieden. Somit gehört ActionWebService nicht mehr
zum Standard-Paket. Es kann aber weiterhin als separates gem installiert und benutzt werden.

ActiveSupport:

Außer Array#rand um einen beliebigen Wert aus dem Array zu holen und Hash#expect um die Schlüssel zu filtern, bestehen die Änderungen hauptsächlich aus Bugfixes.

Action Mailer:

Neben Bugfixes sind alternative Templates die hauptsächlichen Änderungen in diesem Bereich.

Rails: The debugger is back:

Man kann nun den Debugger wieder benutzen.

Rails: Clean up your environment:

Es soll geordneter in Rails 2.0 zugehen. So wird es möglich sein umgebungsspezifische Parameter und Initialisierugen besser zu verwalten. Neue Rails 2.0 werden mit zwei Beispielen ausgeliefert an denen man sich orientieren kann.

Rails: Easier plugin order:

Da ein Teil der Funktionen in Plugins ausgelagert wurde , wird man in Rails 2.0 die Ladereihenfolge selber bestimmen können. So wird gewährleistet, dass eventuelle Abhängigkeiten eingehalten werden können.

Update auf Rails 2.0:

Wer seine Applikation auf Rails 2.0 updaten möchte, sollte erst sicherstellen, dass er bereits die Version 1.2.3 benutzt.

Wenn das Logfile dann keine Warnungen über “deprecated” Funktionen enthält sollte sichergestellt werden, dass Bereiche die dann nur noch als Plugin verfügbar sind installiert werden (Kommerzielle DB-Adapter, pagination….)

Danach kann mit folgendem Aufruf seine Rails-Umgebung auf das Preview Release updaten:

gem install rails—source http://gems.rubyonrails.org

Den gesamten Original-Thread von David findet ihr unter http://weblog.rubyonrails.com/2007/9/30/rails-2-0-0-preview-release

Rails 1.2.3 ist kompatibel zu Ruby 1.8.6

David hat heute (14.03.07) Rails 1.2.3 veröffentlicht.

Diese Version behebt die Kompatibilitätsprobleme mit Ruby 1.8.6.
Weiterhin sind in dieses Release kleinere Fixes und Anpassungen eingeflossen.

Eine Aktualisierung ist entweder über “gem update rails—include-dependenices” möglich oder für die SVN-Variante einfach das “rel_1-2-3” Tag auschecken.

Rails 1.1 Release Candidate 1 ist verfügbar

Seit gestern ist der Rails 1.1 Release Candidate 1 verfügbar.

Neben vielen Bugfixes sind einige neue Funktionen hinzugekommen.

Es werden noch Tester gesucht. Wer seinen Teil dazu beitragen möchte findet im Rails-Blog [URL] eine Anleitung die letzte Version zu installieren und die nötigen Adressen um die gefundenen Fehler zu reporten.

Einen Überblick was sich mit dieser Version verändert hat findet ihr auf den Seiten von Scott. Wir ahben die Seite von Scott auch auf unserer {links}-Seite aufgenommen: [URL]

Ruby on Rails 1.2 RC 1

Der erste Release Candiate zu Ruby on Rails 1.2 steht zum Download bereit.
Dieses Release bringt einige Erneuerungen und Erweiterungen mit. Unter anderem REST und Resources.

Weiterhin sind einige Bestandteile als deprecatet erklärt worden und werden in späteren Versionen nicht mehr unterstützt. Somit sollte jeder seine Applikationen auf den neusten Stand bringen und ggf. seinen Source aktualisieren.


Rails 1.2: Release Candidate 1

Posted by David November 23, 2006 @ 06:01 AM

It’s been almost eight months since the last major release of Rails introduced

RJS

, respond_to, eager loading, and much more. It’s about time we introduced the latest batch of big ideas we’ve been polishing in the interim.

Since this is a major new release and we’ve gotten so much incredible uptake even since 1.1, we’re feeling the need to certify that things work as well as they can out the gates. Thus, this release candidate to fret out any regressions or major issues with the new features.

What’s New

But first, allow me to give you a short rundown of what you should be excited about. While these new features may not appear to have the immediate glitz and glamour the likes of

RJS

, they still represent a big fundamental shift in how a lot of Rails applications will be created from this day forth.

REST

and Resources

REST

, and general

HTTP

appreciation, is the star of Rails 1.2. The bulk of these features were originally introduced to the general public in my

RailsConf keynote on the subject

. Give that a play to get into the mindset of why

REST

matters for Rails.

Then start thinking about how your application could become more RESTful. How you too can transform that 15-action controller into 2-3 new controllers each embracing a single resource with CRUDing love. This is where the biggest benefit is hidden: A clear approach to controller-design that’ll reduce complexity for the implementer and result in an application that behaves as a much better citizen on the general web.

To help the transition along, we have a scaffold generator that’ll create a stub

CRUD

interface, just like the original scaffolder, but in a RESTful manner. You can try it out with script/generate scaffold_resource. Left with no arguments like that, you get a brief introduction to how it works and what’ll create.

The only real

API

element that binds all this together is the new map.resources, which is used instead of map.connect to wire a resource-based controller for

HTTP

verb love. Then, once you have a resource-loving controller, you can link with our verb-emulation link

link_to "Destroy", post_url(post), :method => :delete

. Again, running the resource scaffolder will give you a feel for how it all works.

Formats and respond_to

While respond_to has been with us since Rails 1.1, we’ve added a small tweak in 1.2 that ends up making a big difference for immediate usefulness of the feature. That is the magic of :format. All new applications will have one additional default route:

map.connect ':controller/:action/:id.:format'

. With this route installed, imagine the following example:



class WeblogController < ActionController::Base
def index
@posts = Post.find :all
end




respond_to do |format|
format.html
format.xml { render :xml => @posts.to_xml }
format.rss { render :action => "feed.rxml" }
end
end




GET /weblog     # returns HTML from browser Accept header
GET /weblog.xml # returns the XML
GET /weblog.rss # returns the RSS


Using the Accept header to accomplish this is no longer necessary. That makes everything a lot easier. You can explore your

API

in the browser just by adding .xml to an

URL

. You don’t need a before_filter to look for clues of a newsreader, just use .rss. And all of them automatically works with page and action caching.

Of course, this format-goodness plays extra well together with map.resources, which automatically makes sure everything Just Works. The resource-scaffold generator even includes an example for this using format.xml, so /posts/5.xml is automatically wired up. Very nifty!

Multibyte

Unicode ahoy! While Rails has always been able to store and display unicode with no beef, it’s been a little more complicated to truncate, reverse, or get the exact length of a

UTF

-8 string. You needed to fool around with

KCODE

yourself and while plenty of people made it work, it wasn’t as plug ’n play easy as you could have hoped (or perhaps even expected).

So since Ruby won’t be multibyte-aware until this time next year, Rails 1.2 introduces ActiveSupport::Multibyte for working with Unicode strings. Call the

chars

method on your string to start working with characters instead of bytes.

Imagine the string ‚2.99. If we manipulate it at a byte-level, it’s easy to get broken dreams:



'€2.99'[0,1] # => "342"
'€2.99'[0,2] # => "?"
'€2.99'[0,3] # => "€"


The € character takes three bytes. So not only can’t you easily byte-manipulate it, but String#first and TextHelper#truncate used to choke too. In the old days, this would happen:



'€2.99'.first        # => '342'
truncate('€2.99', 2) # => '?'


With Rails 1.2, you of course get:



'€2.99'.first        # => '€'
truncate('€2.99', 2) # => '€2'


TextHelper#truncate/excerpt and String#at/from/to/first/last automatically does the .chars conversion, but if when you need to manipulate or display length yourself, be sure to call .chars. Like:



You've written <%= @post.body.chars.length %> characters.


With Rails 1.2, we’re assuming that you want to play well with unicode out the gates. The default charset for action renderings is therefore also

UTF

-8 (you can set another with

ActionController::Base.default_charset=(encoding)

).

KCODE

is automatically set to

UTF

-8 as well.

Watch the screencast.

(but note that manually setting the

KCODE

is no longer necessary)

Unicode was in greatest demand, but Multibyte is ready handle other encodings (say, Shift-JIS) as they are implemented. Please extend Multibyte for the encodings you use.

Thanks to Manfred Stienstra, Julian Tarkhanov, Thijs van der Vossen, Jan Behrens, and (others?) for creating this library.

Gotchas

While we’ve tried our best to remain as backwards compatible with 1.1.6 as possible, there are a few minor edge cases that will need some rework if you used to do things a certain way.

Routes

Action Pack has an all new implementation of Routes that’s both faster and more secure, but it’s also a little stricter. Semicolons and periods are separators, so a

/download/:file

route which used to match

/download/history.txt

doesn’t work any more. Use

:requirements => { :file => /.*/ }

to match the period.

Auto-loading

We’ve fixed a bug that allowed libraries from Ruby’s standard library to be auto-loaded on reference. Before, if you merely reference the Pathname constant, we’d autoload pathname.rb. No more, you’ll need to manually

require 'pathname'

now.

We’ve also improved the handling of module loading, which means that a reference for Accounting::Subscription will look for app/models/accounting/subscription.rb. At the same time, that means that merely referencing Subscription will

not

look for subscription.rb in any subdir of app/models. Only app/models/subscription.rb will be tried. If you for some reason dependend on this, you can still get it back by adding app/models/accounting to config.load_paths in config/environment.rb.

Prototype

To better comply with the

HTML

spec,

Prototype’s Ajax-based forms no longer serialize disabled form elements.

Update your code if you rely on disabled field submission.

For consistency

Prototype’s Element and Field methods no longer take an arbitrary number of arguments.

This means you need to update your code if you use Element.toggle, Element.show, Element.hide, Field.clear, and Field.present in hand-written JavaScript (the Prototype helpers have been updated to automatically generate the correct thing).



// if you have code that looks like this
Element.show('page', 'sidebar', 'content');
// you need to replace it with code like this
['page', 'sidebar', 'content'].each(Element.show);


Action Mailer

All emails are

MIME

version 1.0 by default, so you’ll have to update your mailer unit tests:

@expected.mime_version = '1.0'

Deprecation

Since Rails 1.0 we’ve kept a stable, backward-compatible

API

, so your apps can move to new releases without much work. Some of that

API

now feels like our

freshman 15

so we’re going on a diet to trim the fat.

Rails 1.2 deprecates a handful of features which now have superior alternatives or are better suited as plugins.

Deprecation isn’t a threat, it’s a promise! These features will be entirely gone in Rails 2.0. You can keep using them in 1.2, but you’ll get a wag of the finger every time: look for unsightly deprecation warnings in your test results and in your log files.

Treat your 1.0-era code to some modern style. To get started, just run your tests and tend to the warnings.

Installing

The release candidate gems live in the Rails gem repository. You install them like this:



gem install rails --source http://gems.rubyonrails.org --include-dependencies


Or you can grab it straight from Subversion with http://dev.rubyonrails.org/svn/rails/branches/1-2-pre-release.

Submitting regression bugs

There you have it. Those are the major changes and as always, you can get the full, nitty-gritty scoop in the CHANGELOGs. Over the last eight months, we’ve made litteraly hundreds of improvements. It’s well worth traversing the CHANGELOGs for goodies. Ryan’s Scraps is doing a good job

annotating the changes

as well.

But with the release of any new piece of software, a number of things which used to work, will work no longer.

While the intention with Rails 1.2 is to provide seamless backwards compatibility, we’re only human, and chances are a few things have snuck through. So if you’re trying out the 1.2 release candidate, and find a bug, be sure to report it to us. There are a few steps you should follow to help us fix your bug during the release canididate cycle.

When adding your bug report, be sure to put 1.2regression in the keywords field. Bugs with this keyword show up in a

trac report

, if you’re looking for a place to help out, start there.

If at all possible, please include a failing unit test with your bug report. This makes our life significantly easier, and helps others verify that you’ve found a genuine case.


Den Artikel findet ihr auf der Hauptseite unter: http://weblog.rubyonrails.org/2006/11/23/rails-1-2-release-candidate-1

Rails 1.2: RC 2 veröffentlicht

Der nächste Release Candidate ist veröffentlicht worden.
Da dies die letzte Version vor dem endgültigen Release sein soll, sind alle eingeladen es ausgiebig zu testen.

Eure Installation könnt ihr wie gewohnt über gem aktualisieren:
gem install rails –source http://gems.rubyonrails.org –include-dependencies