1.9 Update auf Rails 2.0.x 

Bevor Sie Ihre bestehenden Rails-Applikationen auf Rails 2.0.x updaten, sollten Sie auf Rails 1.2.6 updaten. In Rails 1.2.6 werden Warnmeldungen für das meiste, was ab Rails 2.0 nicht mehr unterstützt wird, ausgegeben. So dass Sie, wenn unter Rails 1.2.6 keine Warnmeldungen ausgegeben werden, davon ausgehen können, dass Ihre Applikation mit hoher Wahrscheinlichkeit auch fehlerfrei unter Rails 2.0.x laufen wird.
Um auf Rails 2.0.x upzudaten, führen Sie bitte folgende Befehle aus:
sudo gem update --system
sudo gem install rails
Das RubyGems-Paket rake sollte mindestens in Version 0.7.3 vorliegen (rake --version). Über folgenden Befehl können Sie das Paket updaten:
sudo gem update rake
Hinweis |
Der Befehl sudo wird von Windows und einigen Linux/Unix-Plattformen nicht unterstützt und muss daher auf diesen Systemen weggelassen werden. |
Anschließend bringen Sie die integrierten JavaScript-Bibliotheken prototype und scriptaculous und die Rails-Skripte wie die Generatoren in Ihrer Rails-Applikation mit dem Befehl
rake rails:update
auf den neuesten Stand.
Mit dem Befehl rails -v ermitteln Sie die aktuell installierte Railsversion. Die Versionsnummer tragen Sie in der Datei config/environment.rb ein:
... RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION ...
Listing config/environment.rb
Nachdem Sie die Version Rails 2.0.x installiert und Ihre Applikation auf den neuesten Stand gebracht haben, müssen Sie Schritt für Schritt jedes noch auftretende Problem beheben.
Wir können Ihnen hier eine Auswahl der häufigsten Probleme, auf die Sie stoßen könnten, geben. Diese Liste erhebt keinen Anspruch auf Vollständigkeit, da es bei jeder Applikation zu anderen Problemen kommen kann.
Resourcen-Controller werden nur noch im Plural angegeben
Kann für vorhandene Singular-Resourcen mit der Option :controller überschrieben werden:
map.resource :example, :controller => 'example'
Keine Instanzvariablen mehr für params, sessions, flash und andere
Auf Parameter aus Formularen, Session-Variablen, Flash-Meldungen und andere Variablen wurde vor Rails 2.0 als Instanzvariablen zugegriffen:
@params[:bookmark] @session[:admin] @flash[:notice] = "Fehler bei der Anmeldung!" @request.bookmarks.first @env['PATH_INFO']
Ab Rails 2.0 erfolgt der Zugriff ohne das führende @-Zeichen:
params[:bookmark] session[:admin] flash[:notice] = "Fehler bei der Anmeldung!" request.bookmarks.first env['PATH_INFO']
render_partial
Um ein Partial aus einem Controller oder einem Template heraus einzubinden, wird ab Rails 2.0 die Methode render_partial nicht mehr unterstützt. Stattdessen erfolgt der Aufruf mit render :partial => "Name des Partials"
Der Aufruf
render :partial => @employee
ersetzt den Aufruf von
render :partial => "employee", :object => @employee
Und der Aufruf
render :partial => @employees
ersetzt den Aufruf von
render :partial => "employee", :collection => @employees
render_without_layout
Die Helper-Methode render_without_layout wird nicht mehr unterstützt. Nutzen Sie stattdessen:
render :layout => false
paginate
Um das Ergebnis einer Abfrage auf mehreren Seiten auszugeben, stand bis Rails 2.0 der Helper paginate zur Verfügung. Ab Rails 2.0 wird diese Methode nicht mehr unterstützt. Nutzen Sie stattdessen das Plug-in will_paginate.
start_form_tag und end_form_tag
Die beiden Helper start_form_tag und end_form_tag werden nicht mehr unterstützt. Sie können sie durch form_tag und </form> ersetzen:
<% form_tag examples_path %> <%= text_field :example, :title %> <%= submit_tag "Speichern" %> </form>
Oder Sie können der Methode form_tag einen Block übergeben:
<% form_tag examples_path do %> <%= text_field :example, :title %> <%= submit_tag "Speichern" %> <% end %>
Das Formular wird automatisch auf das Ende des Blocks geschlossen.
Neue Option :method in link_to
Die Option :post in der link_to -Methode wird durch die neue Option :method ersetzt:
link_to "löschen", employee_url(:id => employee), :method => :delete
Components
Components war ein Konzept, um während der Ausführung einer Action im Controller eine andere Action mit dem Ergebnis aus der Action, die gerade ausgeführt wird, aufzurufen. Da es zu langsam war, wird Components von Rails 2.0.x nicht mehr unterstützt.
Sollten Sie Components in einer Ihrer Applikationen genutzt haben, versuchen Sie, mit Hilfe von Partials und Filter zu refaktorisieren oder mit Hilfe des Plugins embedded_actions ( http://railsbuch.de/urls/3 ) die Funktionalität wiederherzustellen.
ActiveRecord: acts_as_*
Um den Kern ab Rails 2.0 schlank zu halten, stehen die ActiveRecord -Methoden acts_as_list, acts_as_nested_set und acts_as_tree nicht mehr in der Standardinstallation von Rails zur Verfügung, sondern sie müssen als Plug-ins installiert werden. Danach können sie wie gewohnt verwendet werden.
ruby script/plugin install \ http://svn.rubyonrails.org/rails/plugins/acts_as_list/
ruby script/plugin install \ http://svn.rubyonrails.org/rails/plugins/acts_as_nested_set/
ruby script/plugin install \ http://svn.rubyonrails.org/rails/plugins/acts_as_tree/
ActiveReocord find_all und find_first
Die beiden ActiveRecord -Methoden find_all und find_first werden ab Rails 2.0 nicht mehr unterstützt. Nutzen Sie stattdessen:
Model.find(:all) Model.find(:first)
ActiveRecord: with_scope
ActiveRecord::Base.with_scope kann ab Rails 2.0 nur noch innerhalb von Models eingesetzt werden. Wenn es nicht zu vermeiden ist, kann es mit Hilfe von Model.send(:with_scope) auch noch außerhalb von Models aufgerufen werden.
Optional: Benennen Sie Ihre Templates um
Ab Rails 2.0 werden die Template-Dateien nicht mehr mit der Dateiendung *.rhtml, sondern mit *.html.erb benannt. Da die Dateiendung *.rhtml trotzdem weiterhin unterstützt wird, müssen Sie Ihre Template-Dateien nicht umbenennen, aber mit nachfolgendem rake-Task ist es ganz einfach, falls Sie sich doch dafür entscheiden sollten:
namespace 'views' do desc 'Renames all .rhtml views to .html.erb, .rjs to, .js.rjs, .rxml to .xml.builder, and .haml to .html.haml' task 'rename' do Dir.glob('app/views/**/[^_]*.rhtml').each do |file| puts `svn mv #{file} #{file.gsub(/rhtml$/, '.html.erb')}` end Dir.glob('app/views/**/[^_]*.rxml').each do |file| puts `svn mv #{file} #{file.gsub(/rxml$/, '.xml.builder')}` end Dir.glob('app/views/**/[^_]*.rjs').each do |file| puts `svn mv #{file} #{file.gsub(/rjs$/, '.js.rjs')}` end Dir.glob('app/views/**/[^_]*.haml').each do |file| puts `svn mv #{file} #{file.gsub(/haml$/, '.html.haml')}` end end end
Listing lib/tasks/rails.rake
Aufrufen können Sie den Task mit rake rename.
Mit dieser Liste haben wir Ihnen eine Reihe von Lösungen zu möglichen Problemen, die nach dem Update auf Rails 2.0.x auftreten können, aufgezeigt. Wie bereits erwähnt, kann es von Fall zu Fall zu weiteren Problemen kommen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.