Skip to content
accelerando

Tag Archives: MySQL

Different day, same shit: MySQL Gem again

11-Dec-08

Again, the MySQL ruby gem totally annyoed me trying to install it on a fresh Mac OS X 10.5.5 install and MySQL 5.0.67.

This time the following command brought it to life:

sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

Thanks to a bitter software engineer.

Projektdokumentationen und Anwendungsdesign

19-May-07

In den letzten Tagen habe ich einige ganz interessante, deutsche Projektdokumentationen gefunden.

Zum einen die zur Zeiterfassung Mite gehörende Diplomarbeit, die hier zum Download angeboten wird.
Zum anderen einen Aufsatz von Thomas Bachem, einem der Macher von sevenload.de

Ich finde beide Dokumentationen hochgradig interessant zu lesen, nichts desto habe ich einige Anmerkungen und Gedanken dazu:

Mite ist ein Projekt mit Ruby on Rails. Die Macher hatten am Anfang Lastprobleme, konnten das aber durch einen Umzug auf einen performanteren Server lösen.

Sevenload ist ein PHP Projekt. Leider nutze ich es nicht so häufig wie Youtube, daher kann ich keine definitive Aussage zur Geschwindigkeit treffen. Dennoch frage ich mich, ob es wirklich nötig ist, in einem Grundlagenartikel direkt mit kontrollierten Redundanzen für die einfachsten Sachen wie “durchschnittliche Bewertung eines Bildes” loszulegen? Ich meine, bin ich der einzige, der so etwas für Überflüssig hält? Letzten Endes ist es ein Einzeiler in SQL, der mit korrekter Indexerstellung kein DBMS in die Knie zwingen sollte:

SELECT avg(rating)/count(*), rateable_id FROM ratings GROUP BY rateable_id ORDER BY 1 ASC;

Das dann noch mit einem inner join über die zu bewertenden Dinger verknüpft und gut.

Welcher Ansatz würde ich wählen? Ich selber würde jederzeit Standards vorziehen, im obigen Fall auf ein sauberes ER <->Objekt Mapping und auf Normalisierung in der DB (witzigerweise erwähnt Thomas Bachem das im nächsten Absatz bzgl. Tagging Schema) setzen. In anderen Worten: Lieber den Railsweg gehen und sauberes Design erhalten und dann im Zweifelsfall etwas mehr Hardware hinter her werfen.

Tatsächlich redundate Informationen zu speichern würde ich generell nicht ausschliessen, in diesem Fall allerdings schon. Ich denke, wenn man soweit unten bereits diesen Bedarf hat, wird es eng mit Optimierungen, wenn die Luft unter Last dünner wird.

Ruby On Rails native MySQL Bindings Vs. RMagick

02-Jan-07

I’m writing this post in english in hope that more people find it useful…

Some times ago i really had bad problems installing the MySQL Gem 2.7 with Ruby 1.8.2 or 1.8.5 in conjunction with Rails 1.1.6 on Mac OS X 10.4

Compilation failed with:

Building native extensions. This could take a while…
mysql.c: In function ‘Init_mysql’:
mysql.c:2015: error: ‘ulong’ undeclared (first use in this function)
mysql.c:2015: error: (Each undeclared identifier is reported only once
mysql.c:2015: error: for each function it appears in.)
mysql.c:2015: error: parse error before numeric constant
mysql.c:2018: error: parse error before numeric constant
make: *** [mysql.o] Error 1
mysql.c: In function ‘Init_mysql’:
mysql.c:2015: error: ‘ulong’ undeclared (first use in this function)
mysql.c:2015: error: (Each undeclared identifier is reported only once
mysql.c:2015: error: for each function it appears in.)
mysql.c:2015: error: parse error before numeric constant
mysql.c:2018: error: parse error before numeric constant
make: *** [mysql.o] Error 1
ruby extconf.rb install mysql — –with-mysql-dir=/usr/local/mysql
checking for mysql_query() in -lmysqlclient… 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… yes
checking for mysql_ssl_set()yes
checking for mysql.h… yes
creating Makefile

The gem would then install with Successfully installed mysql-2.7. Creepy!!! But that damn thing just didn’t work.

After quite some googling i found this one:

Running Rails on OS X with MySQL 5.0.24

It’s all about puting a little

#ifndef ulong 
#define ulong unsigned long
#endif

somewhere in “/usr/include/stdlib.h”.

This tipp is still necessary for MySQL 5.0.24+. Thanks again mate!!

But here the trouble starts….

I put the define in a nice little conditional just in case but bah… It would come down to hunt me…

For my project DailyFratze.de i also need RMagick. Again, the gem (1.14.1, 1.14.0 and 1.13) failed to compile but didn’t tell (on runtime it said “require “RMagick” LoadError: No such file to load — RMagick.so” … ) and installation from source did fail as well with:

setup.rb:655:in `command': system("make") failed (RuntimeError)
from setup.rb:664:in `make'
from setup.rb:1258:in `setup_dir_ext'
from setup.rb:1532:in `__send__'
from setup.rb:1532:in `traverse'
from setup.rb:1530:in `dive_into'
from setup.rb:1530:in `traverse'
from setup.rb:1534:in `traverse'
from setup.rb:1533:in `each'
... 8 levels...
from setup.rb:826:in `__send__'
from setup.rb:826:in `invoke'
from setup.rb:772:in `invoke'
from setup.rb:1578
make: *** [all] Error 1

Damn! After banging my head against the walls, reinstalling ImageMagick and all it’s depencies either direct from source, via i-installer and finally as mentioned here i took a break, visited some porn sites and stuff like that and though, hmm… stdlib.h….

I removed the little define and bam! It’s that easy, RMagick compiles just fine…

From the forums i found i guess other people with the same error message may have the same problem as i had…

I really wish installing a ruby on rails environment would be a less pain in the ass…. somewhere near as easy as developing with rails.

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.

Close
E-mail It