Skip to content
accelerando

Monthly Archives: May 2006

Rails: Rolling into production on Mac OS X

29-May-06

Damit die

SetEnv RAILS_ENV production

Direktive in der httpd.conf oder einer lokalen .htaccess Datei funktioniert, muss das Modul “env_module” im Apache aktiviert werden. Dies wird unter Mac OS X nicht standardmässig getan.

Folgende Zeilen in der /etc/httpd.conf einkommentieren:

LoadModule env_module         libexec/httpd/mod_env.so
AddModule mod_env.c

JTabbedPane und JPanels

28-May-06

Stellt man Java Swing Componenten (z.B. JPanels) in JTabbedPanes (javax.swing.JTabbedPane) dar, so gibt die isVisible Methode des JPanels false zurück, falls die Komponente nicht auf dem Reiter im Vordergrund ist. Sinnvolles Verhalten.

Hingegen geben Komponenten auf diesem JPanel mit isVisible alle true zurück… Irgendwie unsinnig. Und nervenaufraubend, wenn sich auf einmal eine Anwendung gänzlich anders verhält, nur weil man ein Register unterteilt hat…. *grummel* Also lieber direkt getSelectedIndex() aus JTabbedPane nutzen und Nerven behalten ;)

Suchphrasen speichern mit BBClone

11-May-06

Seit geraumer Zeit nutze ich BBClone für Statistiken. Einfach und gut zu bedienen, wie ich finde.

Leider speichert BBClone in den Top n nur einzelne Suchwörter und keine Phrasen. Das kann man aber leicht ändern, wie ich in diesem Blog gefunden habe. Gleichzeit wird dort auch beschrieben, wie man BBClone die Zusammenarbeit mit WordPress nahe bringt.

Ich habe den BBClone Log Processor entsprechend angepasst. Um ihn im eigenem BBClone zu verwenden, einfach runterladen, die Endung .txt entfernen und die entsprechende log_processor.php im BBClone Verzeichnis ersetzen.
Die Datei basiert auf dem Log Processor von BBClone 0.4.8b.

UTW Tags als HTML Meta Keywords nutzen

05-May-06

Auch wenn ich allerortens lese, dass die meisten Suchmaschinen

<meta name="keywords" content="blah, und, blub" />

nicht mehr nutzen, halte ich diese Art von Metainformationen immer noch für sinnvoll. Und falls sie es nicht sein sollten, schaden können sie auch nicht.

Um sich die manuelle Tipparbeit zu sparen, kann man die Arbeit von Ultimate Tag Warrior erledigen lassen.

Folgende simpler Eintrag im entsprechenden Headertemplate des Themes erzeugt eine Liste aller Tags aller Posts:

<?php 
if (function_exists('UTW_ShowWeightedTagSetAlphabetical')) {
    print '<meta name="keywords" content="';
    UTW_ShowWeightedTagSetAlphabetical(
        '',
        array(
            'default' => '%tagdisplay%, ', 
            'last' => '%tagdisplay%'
        )
    );
    print '" />';
}
?>

Ruby on Rails mit Mac OS X

05-May-06

Nachdem mich die Tutorials bzw. die kurzen Videos auf rubyonrails.org sehr begeistert haben, musste ich natürlich direkt Rails ausprobieren.

Für den Einstieg sind die diversen Tutorials, die man im Netz findet, recht interessant, wirklich gut ist aber das Buch Agile Web Development with Rails. Man sollte darauf achten, dass man die zweite Ausgabe kauft und nicht wie ich die erste über Amazon.

Im Buch steht soweit alles drin, was man tun muss, um unter Mac OS X direkt loszulegen. Seit OS X Tiger in der Version 10.4.6 funktioniert auch die mitgelieferte Ruby Version problemlos mit Rails.

Um Rails zu installieren sind folgende Schritte notwendig:

RubyGems

curl -O http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz
tar xzvf rubygems-0.8.11.tgz
cd rubygems-0.8.11
sudo ruby setup.rb

Rails

sudo gem install rails --include-dependencies

FastCGI bzw. LightTPD habe ich übersprungen, brauche ich zur Zeit nicht. Allerdings muss natürlich eine Datenbank her. Da ich bereits seit langem MySQL auf dem Rechner habe, wollte ich das auch nutzen:

MySQL

MySQL war der einzige Punkt, der etwas kritisch war. Die folgenden Befehle müssen natürlich an den Installationsort von MySQL angepasst werden, in den meisten Fällen wird der MySQL Installer allerdings einen Link nach /user/local/mysql erzeugt haben.

Folgender Befehl versagte bei mir:

sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql

Und ich sah die ganze Zeit nur:

no checking for main() in -lm... 
yes checking for mysql_query() in -lmysqlclient... 
no checking for main() in -lz... 
yes checking for mysql_query() in -lmysqlclient... 
no checking for main() in -lsocket... 
no checking for mysql_query() in -lmysqlclient... 
no checking for main() in -lnsl... 
no checking for mysql_query() in -lmysqlclient...

Geholfen hat die explizite Angabe der Libraries und Headerverzeichnisse wie folgt:

sudo gem install mysql -- --with-mysql-include=/usr/local/mysql/include/ --with-mysql-lib=/usr/local/mysql/lib/

Danach lief Rails mit dem eingebauten WEBrick problemlos.

Der eingebaute Apache unter Mac OS X

Für fertige Applikationen will ich den eingebauten Apache von OS X nutzen. Auch dazu gibt es einige Tutorials, aber keines alleine führte zu einer funktionierenden, sinnvollen Konfiguration.
Ich bin gewohnt, dass ich meine Seiten auf meinem Rechner unter http://localhost/~msimons/blah erreiche und das wollte ich auch mit den Railsanwendungen können.

Der Mac OS X Apache ist in meinen Augen für einen Rechner, der nicht direkt im Internet hängt, sehr sinnvoll konfiguriert, ich wollte deshalb nicht in der zentralen httpd.conf rumpfuschen. Praktischerweise legt OS X unter /etc/httpd/users/ für jeden OS User eine weitere conf Datei an, die ich entsprechend anpasse. Dazu habe ich mir einen Link auf dieses Datei erstellt und den Eigentümter von root auf mich geändert.

Für eine Beispielapplikation sieht das dann so aus:

Alias /~msimons/test/  "/Users/msimons/dev/rails/test/public/"
Alias /~msimons/test   "/Users/msimons/dev/rails/test/public/"
 
<Directory "/Users/msimons/dev/rails/test/public/">
    Options ExecCGI FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

Danach muss die .htaccess Datei im public Verzeichnis der Testanwendung angepasst werden:

RewriteEngine On
RewriteBase /~msimons/test/

Die forwardslashes sind essentiell.

Ich hatte hier Hinweise gefunden, dass man in einigen Verzeichnissen noch Rechte anpassen muss, weil Apache natürlich nicht im Kontext des Benutzers läuft, sondern unter www:

Deswegen:

cd ~/dev/rails/
sudo chgrp -R www Test
cd Test
chmod 0775 db
chmod 0777 log
chmod 0775 public
chmod 0666 log/*.log

Allerdings wurde dabei das tmp Verzeichnis vergessen:

chmod -R 0775 tmp

Nach einem kurzen Apache Neustart über die Systemeinstellungen oder per

sudo apachectl graceful

steht dem Railsvergnügen unter OS X nichts mehr im Wege.

Resourcen

Geholfen haben mir unter anderem:

Gute Bücher gibt es hier: The Pragmatic Programmer. Sehr empfehlenswert Agile Web Development with Rails und Programming Ruby. Wenn man ersteres kauft, gibt es auf jedes Ruby Buch Rabatt. Sehr charmant.