Migrations in Rails 2.1
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:upHiermit 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:rollbackDieser 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:resetDie gesamte Datenbank wird geleert und dann neu migrated.
Fehlermeldungen per eMail erhalten
Posted in Einstieg auf Deutsch, Cheat Sheets & HowTos, Tutorials | 5 comments |
OpenRoRBook - Das Open Source Buch zu Rails
Allzuviel steht noch nicht drin, aber fuer Einsteiger ist es gut und das wird schon :) http://www.rubyonrails.de/newsitems/98
Posted in Einstieg auf Deutsch | 18 comments |
Upgrades auf Rails 2.0.2
Posted in Einstieg auf Deutsch, Tutorials | 62 comments |
Messagingsystem mit Ruby on Rails
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 Cheat Sheets & HowTos, Tutorials | 14 comments |
Editieren leicht gemacht?
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 klaremacsDen Editor beenden - schon etwas anders als erwartet
CTRL+X CTRL+CWomit 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+FZur 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+SDies 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 railsLeider 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/railsZusä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.elJetzt 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 Einstieg auf Deutsch, Anwendungen & Releases, Tutorials | 12 comments |
Webserver Cluster Tutorial mit Mongrel, MySQL und Apache 2 unter Debian etch
Die Hosts root-Server - 192.168.1.50 VM1 - 192.168.1.61 VM2 - 192.168.1.62Auf 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.50Mit `/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 mongrelDie database.yml muss noch angepasst werden:
production: adapter: mysql database: myprojectsdb username: mydbuser password: mydbpass host: 192.168.1.50 port: 3306Wir 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 productionDamit 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_balancerNun noch den Apache Server neustarten mit
apache2ctl restartUnd 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=2Dies verdoppelt die Priorität des entsprechenden Hosts.
Posted in Einstieg auf Deutsch, Cheat Sheets & HowTos, Tutorials | 10 comments |
"web 2.0" - Beispiel Formulare
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.
Many to Many - Tutorial
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 Cheat Sheets & HowTos, Tutorials | 3 comments |
Try Ruby - Interaktives Ruby-Shell Tutorial
Selbst für die die das alles schon können eine ganz lustige Sache :)
Posted in Tutorials | 2 comments |
