Das deutsche Ruby on Rails Blog
Blog.new(
  :topic => 'Ruby on Rails',
  :language => 'German'
)

Migrations in Rails 2.1

Posted by Niklas Thu, 03 Jul 2008 04:26:00 GMT

Dass die Migrations von Rails 2.1 ein wenig anders aussehen wird wohl jedem aufgefallen sein: die Nummerierung hat sich drastisch geändert. Anstelle der dreistelligen Nummer ist ein Timestamp in der Form YYYYMMDDhhmmss getreten, was nun endlich Nummernkonflikte beim gemeinsamen Arbeiten unwahrscheinlicher macht.

Ein weiterer entscheidener Punkt sind eine ganze Reihe neuer Raketasks die ich hier kurz beschreiben möchte:

db:migrate:down / db:migrate:up
Hiermit wird eine mit dem Parameter VERSION angegebene Migration entweder "heruntergefahren", oder "heraufgefahren", das heisst die entsprechende down- bzw. up-Methode aufgerufen. Dabei ist es irrelevant ob es sich um die neueste Migration handelt oder nicht. Hierdurch wird es nun möglich eine Migration im Nachhinein anzupassen ohne dass spätere Migrations davon betroffen sind.
db:rollback
Dieser Task macht einfach die letzte Migration rückgängig, alternativ kann unter Verwendung des STEP Parameters auch ein grösserer Rollback ausgeführt werden.
db:migrate:redo
Ähnlich der down/up Tasks wird hier die letzte Migration rückgängig gemacht und danach sofort wieder eingespielt. Das spart oft eine Menge Tipparbeit. Wie bei db:rollback ist auch hier ein STEP Parameter möglich.
db:reset
Die gesamte Datenbank wird geleert und dann neu migrated.

7 comments |

Fehlermeldungen per eMail erhalten

Posted by Niklas Sun, 08 Jun 2008 07:39:00 GMT
Dass eine Anwendung, auch wenn sie bereits im Produktiveinsatz ist nicht immer fehlerfrei ist dürfte jedem Entwickler klar sein. Peinlich wird es, wenn ein potentieller oder tatsächlicher Kunde die Fehler bemerkt und darauf aufmerksam macht. Doch zumindest bei tatsächlichen Programmfehlern gibt es hier eine einfache Abhilfe: Sobald ein Fehler aufgetreten ist schickt die Seite eine Fehlermeldung per eMail an die Entwickler!

Posted in , , | 5 comments |

OpenRoRBook - Das Open Source Buch zu Rails

Posted by Chris Wed, 04 Jun 2008 18:41:00 GMT
Von der deutschen Ruby on Rails Community gibt es nun ein Open Source - Buch.

Allzuviel steht noch nicht drin, aber fuer Einsteiger ist es gut und das wird schon :) http://www.rubyonrails.de/newsitems/98

Posted in | 18 comments |

Upgrades auf Rails 2.0.2

Posted by Chris Wed, 04 Jun 2008 18:34:00 GMT
Eine Aufgabe vor der momtan sicher immer wieder Railsentwickler stehen, ist der Upgrade einer Anwendung von einer alten Railsversion wie 1.2.6 auf 2.0.2. Allzuviele Probleme sind nicht zu erwarten. Aber die allseits bekannten 'deprecated' warnings gewinnen nun in ihrer Prophezeihung an Wert. Vor dem Upgrade sollte also der Code und die Architektur moeglichst ueberprueft werden. Hier mal ein Erfahrungsbericht auf Deutsch und dann noch einige weitere Links: http://blog.inceedo.com/rails/rollacastr-rails-2-upgrade-story/ http://www.slashdotdash.net/articles/2007/12/03/rails-2-upgrade-notes http://railsforum.com/viewtopic.php?id=14542

Posted in , | 62 comments |

Messagingsystem mit Ruby on Rails

Posted by Chris Fri, 22 Feb 2008 23:55:00 GMT
http://www.novawave.net/public/rails_messaging_tutorial.html

Hier wird die Entwicklung eines einfachen Messagingsystems mit Ruby on Rails beschrieben.

Netter Ansatz, werde ich vielleicht noch uebersetzen.

Dieses Tutorial ist auf jeden Fall einen Blick wert fuer all Jene, die sich noch nicht mit den coolen neuen Funktionen von Rails 2 befasst haben, z.B. die Art und Weise, Migrations zu erstellen.

Posted in , | 14 comments |

Editieren leicht gemacht?

Posted by Niklas Mon, 11 Feb 2008 01:45:00 GMT

Für den Programmiereinsteiger mag die unglaubliche Vielfalt an Editoren recht verwirrend und unnötig aussehen. So dachte ich auch lange Zeit, war ich doch sehr zufrieden mit meiner Welt. Mein Editor hiess nano und entsprechend gestaltete sich auch der Funktionsumfang: eher gering! Doch schon der erste Blick in die Rails-Welt öffnet so manchem Zweifler die Augen. Hatte man vorher eine eher überschaubare Anzahl Dateien die zwar mit der Zeit wuchsen, jedoch zumindest den Anschein eines Überblicks erweckten ertappt man sich nun dabei die Zeit mehr mit der Eingabe von Dateinamen als von Code zu verbringen.
Da fragt sich auch ein traditionsbewusster Konsolen-Junkie ob es nicht an der Zeit wäre auf eine IDE umzusteigen - aber welche? Wer schonmal einen Blick in die Java-Welt gewagt hat, hörte auch schonmal von NetBeans, Eclipse und ähnlichen Performance-Killern. Zufrieden ist man - wenn überhaupt - nach der dritten unerklärlichen Fehlermeldung nicht mehr. Ich stiess dann nach einiger Zeit exzessiver IDE-Verweigerung auf KDevelop, welches prompt mehrere MB große Session-Files anlegte. Fast schon hatte ich den Glauben an die OpenSource Welt verloren, als ich ihn dann doch wiederfand, und ausgerechnet beim wohl ältesten OpenSource Programm überhaupt: GNU Emacs.

Unter UNIX-Gurus bekannt, stets auf Kriegsfuß mit dem `vi' hält es nicht nur eine integrierte Psychaterin bereit sondern - nach einigem Konfigurieren - auch eine unglaubliche Vielfalt an Rails-Funktionalität. Hier möchte ich nun einen kurzen Einstieg geben in dem was Emacs alles zu bieten hat und wie man den Editor und Benutzer fit für RubyOnRails macht.

Grundfunktionalität

Zu diesem Thema gibt es Unmengen von Dokumenten - nicht zuletztdas aus Emacs selbst aufrufbare Tutorial zur Benutzung - weshalb ich nur die wichtigsten Grundfunktionen ansprechen möchte: Den Editor starten - eigentlich klar
  emacs
Den Editor beenden - schon etwas anders als erwartet
  CTRL+X CTRL+C
Womit wir schon bei einer Eigenheit von Emacs angelangt sind: die kombinierten Shortcuts. Da die meisten Tasten recht weit von den Steuertasten entfernt liegen und unser Proband auch weit mehr als nur 26 Funktionen zu bieten hat werden Shortcuts meist aneinandergehängt. Dies kann durchaus auch einmal ausarten, aber keine Panik, man gewöhnt sich daran. Eine Datei öffnen
  CTRL+X CTRL+F 
Zur Vervollständigung des Dateinamens reicht ein Druck auf die TAB Taste, gibt es mehrere Möglichkeiten, so bringt ein weiterer TAB eine Übersicht auf den Monitor. Eine Datei speichern
  CTRL+X CTRL+S
Dies soll auch schon alles zu diesem Thema sein, wie bereits erwähnt haben bereits unzählige Menschen diese Funktionalitäen ausfürlich beschrieben.

Den Emacs auf Schienen bringen

Zunächst legen wir den emacs-Konfigurations-Ordner an, sollte dies noch nicht vom System erledigt worden sein:
  mkdir ~/.emacs.d/
Dann holen wir uns die aktuelle emacs-rails Version. Diese kann entweder bei Rubyforge (http://rubyforge.org/projects/emacs-rails) oder direkt über Subversion bezogen werden:
  cd ~/.emacs.d/
  svn co svn://rubyforge.org/var/svn/emacs-rails/trunk rails
Leider ist die Distribution von emacs-rails nicht ganz vollständig: Es fehlen die Ruby-Highlighting Funktionen, die allerdings dem Ruby-Source beigefügt sind. Zu bekommen sind diese entweder unter `http://www.ruby-lang.org/de/downloads/' oder über das Paketmanagement unseres Systems. Wir finden die Highlighting-Funktionen im Ordner `misc':
  cp misc/*.el ~/.emacs.d/rails
Zusätztlich benötigt emacs-rails noch zwei weitere Plugins:
  cd ~/.emacs.d/rails
  wget http://www.kazmier.com/computer/snippet.el
  wget http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt
  mv find-recursive.txt find-recursive.el
Jetzt müssen wir Emacs noch von der Existenz unserer Konfigurationen in Kenntnis setzen.
  cat >> ~/.emacs << EOF
  (setq load-path (cons "~/.emacs.d/rails" load-path))
  (require 'rails)
  EOF

Der Test

Als nächstes sollten wir unsere neue Arbeitsumgebung testen. Dazu öffnen wir am besten eine vorhandene Rails-Anwendung:
  cd /pfad/zur/anwendung
  emacs app/controller/application.rb &
Wenn alles geklappt hat stehen wir nun einem bunt beleuteten ApplicationController gegenüber. Ausserdem erscheinen oben im Menü ein paar neue Optionen: Snippets, Database, Tests, RoR. Diese Funktionalitäten möchte ich hier kurz vorstellen.
Snippets - Hier werden Kürzel zur Verfügung gestellt die das Leben um einiges leichter machen. Diese können entweder aus dem Menü ausgewählt oder direkt im Code eingegeben werden. Nach der Eingabe bringt ein TAB den neuen Code zum Vorschein. Hier können nun entsprechende Felder ausgefüllt werden, ein TAB springt jeweils zum nächsten, am Ende bringt er uns zurück in den Bearbeitungsmodus. Besonders schön sieht man dies am Beispiel von Migrations: Ein einfaches `ct' gefolgt von TAB erzeugt uns folgenden Code:
  create_table :table do |t|
    tcls
  end
Mit TAB bearbeiten wir nun das :table, ein weiterer TAB macht aus dem `tcls' ein t.column :name, :type. Es lohnt sich hiermit ein wenig zu spielen.
Database - Datenbankaufgaben wie Migrate, Dump etc. können hier per Menü oder Shortcut erledigt werden.
Tests - Hier liegt die Testing-Funktionalität.
RoR - Dies ist der Kern unseres Environment. Es gibt direkten Zugriff auf die Log-Dateien, starten und stoppen des Servers, Öffnen des Browsers, rake-Tasks, generators, Konfigurationsdateien, die Rails-Konsole und vieles mehr.

Eine weiter Funktion auf die ich noch hinweisen möchte ist die Speedbar. Sie kann im Menü unter Options->Show/Hide->Speedbar aktiviert werden. Hier haben wir entweder einen schnellen Dateibrowser, oder (mit Klick auf die Leiste am unteren Rand) den `Ruby-on-Rails Browser'. Dieser lässt uns direkt zu den einzelnen Klassen und Methoden springen.

Viel Spaß nun also beim ausprobieren.

Posted in , , | 12 comments |

Webserver Cluster Tutorial mit Mongrel, MySQL und Apache 2 unter Debian etch

Posted by Niklas Fri, 08 Feb 2008 09:20:00 GMT
Mit steigenden Besucherzahlen merkt man gerade bei komplexen Anwendungen schnell, dass die Geschwindigkeit der Seite sinkt. Dies kann verschiedene Gründe haben. Liegt der Hauptperformancefaktor der Anwendung auf der Datenbank, so sollte über ein Datenbankcluster nachgedacht werden. Die meisten Datenbankserver bieten hier recht gute Verfahren die Transferlast zu verteilen. Ist die Performance-Bremse jedoch die Anwendung selbst, so wird es schon schwieriger. Glücklicherweise bietet sich hier die Möglichkeit des Webserver Clusterings. Grundvoraussetzung sind natürlich mehrere dedizierte Server. In unserem Szenario gehen wir von 3 Maschinen aus, zwei davon sind VMs mit geringerer Leistung, einer unser root-Server auf dem auch die Datenbank liegt. Zunächst müssen wir unseren Datenbankserver konfigurieren, damit die VMs darauf zugreifen können. Als Beispiel nehme ich dafür eine MySQL-Datenbank. Unsere Beispiel-Konfiguration sieht so aus:
Die Hosts
 root-Server - 192.168.1.50
 VM1 - 192.168.1.61
 VM2 - 192.168.1.62
Auf dem root-Server führen wir folgendes aus:
root-server:~$ mysql -u root -p
GRANT ALL PRIVILEGES ON myprojectsdb.* TO 'mydbuser'@'192.168.1.61' IDENTIFIED BY 'mydbpass';
GRANT ALL PRIVILEGES ON myprojectsdb.* TO 'mydbuser'@'192.168.1.62' IDENTIFIED BY 'mydbpass';
Alternativ kann die IP auch mit '%' ersetzt werden. In diesem Fall werden Verbindungen von überall aus angenommen. Aus Sicherheitsgründen sollte die gezeigte Variante jedoch normalerweise bevorzugt werden. Damit Verbindungen von ausserhalb überhaupt akzeptiert werden muss noch folgende Einstellung in /etc/mysql/my.cnf vorgenommen werden:
bind-address 192.168.1.50
Mit `/etc/init.d/mysql restart' starten wir den MySQL-Daemon neu. Die Datenbank ist bereit, wir bereiten nun unsere Hosts vor. Installieren wir Mongrel:
VM1:~$ gem install mongrel
Die database.yml muss noch angepasst werden:
production:
  adapter: mysql
  database: myprojectsdb
  username: mydbuser
  password: mydbpass
  host: 192.168.1.50
  port: 3306
Wir starten nun unseren Server. Dazu gehen wir in das Projekt-Verzeichnis und führen folgendes aus:
VM1:~$ mongrel_rails start -p 3000 -d -e production
VM1:~$ mongrel_rails start -p 3001 -d -e production
Damit starten wir auf unserer ersten VM zwei Server, einen auf Port 3000, den anderen auf Port 3001.

Wir führen die selben Schritte auch auf unserer zweiten VM durch.

Als nächstes ist der Apache auf unserem root-Server dran. Am besten richten wir einen vHost ein:
/etc/apache2/sites-available/myrailsproject:
  <VirtualHost *:80>
    ServerName my.rails-app.domain.tld
    ServerAdmin your@mailaddress.tld
    ProxyPass / balancer://myrailsproject/
    ProxyPassReverse /  balancer://myrailsproject/
  </VirtualHost>
Den balancer müssen wir nun noch konfigurieren:
/etc/apache2/httpd.conf
  <Proxy balancer://myrailsproject>
    BalancerMember http://192.168.1.61:3000
    BalancerMember http://192.168.1.61:3001

    BalancerMember http://192.168.1.62:3000
    BalancerMember http://192.168.1.62:3001
  </Proxy>
Eventuell muss noch das Modul "mod_proxy_balancer" eingebunden werden. Dies tun wir mit
  a2enmod proxy_balancer
Nun noch den Apache Server neustarten mit
  apache2ctl restart
Und fertig ist unser Cluster! Natürlich könnten wir die Anwendung auch noch auf unserem root-Server laufen lassen, doch gerade bei vielen Projekten empfiehlt es sich einen Server nur für das Balancing zu reservieren. Zuletzt noch ein Tipp! Haben wir Server mit verschiedener Leistung in unserem Cluster bietet uns Apache folgende Option in unserer Balancer-Konfiguration:
  BalancerMember htt://192.168.1.61:3000 loadfactor=2
Dies verdoppelt die Priorität des entsprechenden Hosts.

Posted in , , | 10 comments |

"web 2.0" - Beispiel Formulare

Posted by Andi Mon, 04 Feb 2008 18:34:00 GMT
Auch wenn sich über den Begriff "Web 2.0" sowie dessen inflationäre Verwendung, streiten lässt, fasst er für viele doch ganz gut zusammen was "Usability" oder auch gute Benutzerführung bedeutet.

Für all diejenigen die für gute und schicke Benutzerführung in Formularen Inspiration suchen, hat das Smashingmagazine hat eine ganz nette Sammlung von sogenannten "Web 2.0 Forms" zusammengestellt.

Posted in | 1 comment |

Many to Many - Tutorial

Posted by Chris Sat, 02 Feb 2008 13:57:00 GMT
http://jrhicks.net/96

Hier gibt es ein laengeres PDF mit einer kompletten Reise durch die Behandlung von Many to Many Relations inklusive View, Controller und Models.

Posted in , | 3 comments |

Try Ruby - Interaktives Ruby-Shell Tutorial

Posted by Andi Mon, 28 Jan 2008 11:01:00 GMT
Auf http://tryruby.hobix.com/ gibt es ein tolles 15minütiges Tutorial. Statt findet dieses Tutorial in einer interaktiven Ruby-Shell, und führt einen wunderbar learning by doing in Syntax und Anwendung einiger Methoden von Ruby ein.

Selbst für die die das alles schon können eine ganz lustige Sache :)

Posted in | 2 comments |

Older posts: 1 2 3 ... 6