Ruby On Rails MySQL Problem

H

hvgg user

Mitglied
Thread Starter
Dabei seit
16.10.2007
Beiträge
20
Reaktionspunkte
0
Hallo,

ich habe gestern geschlagene zwei Stunden versucht Ruby On Rails zu installieren und mit MySQL zum Laufen zu bekommen.
Das System ist 10.6 mit allen aktuellen Updates. RoR läuft soweit auch ohne Probleme, wenn ich ein Projekt mit SQLite als DB anlege. Da SQLite für meine Zwecke aber zu primitiv ist wollte ich ein Projekt mit MySQL als DB erstellen. Funktioniert leider nicht.

Zuerst habe ich normal mit
Code:
sudo gem update --system
sudo gem install rails
RoR installiert. Hat auch ohne Probleme funktioniert. Wenn ich jetzt aber mit
Code:
sudo env ARCHFLAGS="-arch i386"  \
     gem install mysql -- \
     --with-mysql-config=/usr/local/mysql/bin/mysql_config
die MySQL Erweiterung für RoR installieren möchte kommen haufenweise Fehlermeldungen.
Wenn ich auf gut Glück ein Projekt mit MySQL als DB anlege kommen erstmal keine Fehlermeldungen, bis ich dann versuche auf die DB zuzugreifen. Dann bekommen ich "Couldn't connect do db..." als Fehlermeldung. Vermutlich weil die MySQL Extension nicht richtig installiert ist.

MySQL ist installiert, sowohl in Version 5.1 also auch 5.5 (drüber installiert). Es hat sowohl bei 5.1 nicht funktioniert und jetzt mit 5.5 auch nicht. Auch mit einem parallel installierten MAMP läuft RoR nicht. MySQL läuft jedoch in allen Fällen und funktioniert auch korrekt.

Ich komme hier nicht wirklich weiter. Auch diese Anleitung aus einem anderen Thread funktioniert nicht. Kann wer helfen?
 
Zuletzt bearbeitet:
Hast du denn mit
Code:
rake db:create
die Datenbank überhaupt erstellt?

Bei SQLite war das nicht nötig, bei MySQL schon.

Wie lautet die Fehlermeldung genau? Was zeigt
Code:
gem list
 
Ja habe ich, aber bei "rake db:create" kommt bereits die Fehlermeldung
Code:
Couldn't create database for {"reconnect"=>false, "encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql", "database"=>"activerecord_bsp1_development", "host"=>"localhost", "pool"=>5, "password"=>"****", "socket"=>"/Applications/MAMP/tmp/mysql/mysql.sock"}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)

Bei gem list kommt folgendes:
Code:
*** LOCAL GEMS ***

actionmailer (2.3.5, 2.2.2, 1.3.6)
actionpack (2.3.5, 2.2.2, 1.13.6)
actionwebservice (1.2.6)
activerecord (2.3.5, 2.2.2, 1.15.6)
activeresource (2.3.5, 2.2.2)
activesupport (2.3.5, 2.2.2, 1.4.4)
acts_as_ferret (0.4.4, 0.4.3)
capistrano (2.5.10, 2.5.2)
cgi_multipart_eof_fix (2.5.0)
daemons (1.0.10)
dnssd (1.3.1, 0.6.0)
fastthread (1.0.7, 1.0.1)
fcgi (0.8.8, 0.8.7)
ferret (0.11.6)
gem_plugin (0.2.3)
highline (1.5.1, 1.5.0)
hpricot (0.8.2, 0.6.164)
libxml-ruby (1.1.3, 1.1.2)
mongrel (1.1.5)
mysql (2.8.1)
mysqlplus (0.1.1)
needle (1.3.0)
net-scp (1.0.2, 1.0.1)
net-sftp (2.0.4, 2.0.1, 1.1.1)
net-ssh (2.0.17, 2.0.4, 1.1.4)
net-ssh-gateway (1.0.1, 1.0.0)
rack (1.0.1)
rails (2.3.5, 2.2.2, 1.2.6)
rake (0.8.7, 0.8.3)
RedCloth (4.2.2, 4.1.1)
ruby-openid (2.1.7, 2.1.2)
ruby-yadis (0.3.4)
rubygems-update (1.3.5)
rubynode (0.1.5)
sqlite3-ruby (1.2.5, 1.2.4)
termios (0.9.4)
xmpp4r (0.5, 0.4)

Beim schon genannten Versuch die MySQL Extension zu installieren kommt im übrigen folgendes:
Code:
bash-3.2$ sudo env ARCHFLAGS="-arch i386"  \
>      gem install mysql -- \
>      --with-mysql-config=/usr/local/mysql/bin/mysql_config
Password:
Building native extensions.  This could take a while...
Successfully installed mysql-2.8.1
1 gem installed
Installing ri documentation for mysql-2.8.1...

No definition for next_result
No definition for field_name
No definition for field_table
No definition for field_def
No definition for field_type
No definition for field_length
No definition for field_max_length
No definition for field_flags
No definition for field_decimals
No definition for time_inspect
No definition for time_to_s
No definition for time_get_year
No definition for time_get_month
No definition for time_get_day
No definition for time_get_hour
No definition for time_get_minute
No definition for time_get_second
No definition for time_get_neg
No definition for time_get_second_part
No definition for time_set_year
No definition for time_set_month
No definition for time_set_day
No definition for time_set_hour
No definition for time_set_minute
No definition for time_set_second
No definition for time_set_neg
No definition for time_set_second_part
No definition for time_equal
No definition for error_errno
No definition for error_sqlstate
Installing RDoc documentation for mysql-2.8.1...
No definition for next_result
No definition for field_name
No definition for field_table
No definition for field_def
No definition for field_type
No definition for field_length
No definition for field_max_length
No definition for field_flags
No definition for field_decimals
No definition for time_inspect
No definition for time_to_s
No definition for time_get_year
No definition for time_get_month
No definition for time_get_day
No definition for time_get_hour
No definition for time_get_minute
No definition for time_get_second
No definition for time_get_neg
No definition for time_get_second_part
No definition for time_set_year
No definition for time_set_month
No definition for time_set_day
No definition for time_set_hour
No definition for time_set_minute
No definition for time_set_second
No definition for time_set_neg
No definition for time_set_second_part
No definition for time_equal
No definition for error_errno
No definition for error_sqlstate
 
Ich hab eben zum ersten mal probiert MySQL mit Rails zu verwenden, was ebenfalls nicht klappte und ich den gleichen Stand hatte wie du.

Geholfen hat schließlich folgendes:
Code:
#vorhandenes mysql gem löschen
gem uninstall mysql

export ARCHFLAGS="-arch i386 -arch x86_64" ; gem install --no-rdoc --no-ri mysql -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

Wichtig sind dann bei dem zweiten Aufruf die beiden Pfadangaben
Code:
/usr/local/mysql
und
/usr/local/mysql/bin/mysql_config
die auf meine MySQL-Installation zeigen. Also vorher entsprechend anpassen.

Außerdem musst du evtl. die gem-Befehle mit sudo ausführen, je nachdem wo du's installiert hast/haben willst.

Hier sind diese Lösung und andere beschrieben.
 
ok, langsam nervt es. Habe mySQL vollständig gelöscht, sowohl 5.1 als auch 5.5. Dann habe ich mit gem mySQL gelöscht. Anschließend mySQL 5.5 neu installiert. Anschließen entsprechend den Pfad angepasst (war bei mir als Standartinstallation /usr/local/mysql/...) und "export ..." ausgeführt.
Hat leider nicht geklappt. Versuche jetzt mySQL selbst zu kompilen und nicht den Installer zu nehmen. Mal schauen ob das was bringt.
 
jetzt weiß ich endgültig nicht mehr weiter.
Ich habe jetzt MySQL und alle Pakete die für RoR benötigt werden nochmal per macports installiert. Anschließend dann
Code:
export ARCHFLAGS="-arch i386 -arch x86_64" ; gem install --no-rdoc --no-ri mysql -- --with-mysql-dir=/opt/local/lib/mysql5 --with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config
Gleiches Problem wie vorher. Bei "rake db:create" kommt nach wie vor
Code:
(in /Volumes/Tank/workflow/Programming/Ruby On Rails/activerecord_bsp1)
Couldn't create database for {"reconnect"=>false, "encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql", "database"=>"activerecord_bsp1_development", "pool"=>5, "password"=>"****", "socket"=>"/opt/local/var/run/mysql5/mysqld.sock"}, charset: utf8, collation: utf8_unicode_ci (if you set the charset manually, make sure you have a matching collation)
Dummerweise kann "Couldn't create database for..." alles mögliche sein. Es kommt bei "rake db:create" keine andere Fehlermeldung. Bei "rake db:create" kommt der gleiche Fehler wie bei deinem Link ("uninitialized constant MysqlCompat::MysqlRes"). Der MySQL Server läuft korrekt, ein SQL-Terminal das ich mal geschrieben habe läuft ohne Probleme, ebenso die mitgelieferten Commandline-tools. DB Benutzer und Passwort sind in database.yml richtig angegeben. Einen Symlink für /tmp/mysql.sock habe ich ebenfalls gesetzt. Wenn ich bei sock in database.yml den Pfad zum sock unter /opt/... angebe hilft das auch nicht weiter.
Ich bin mit meinem Latein echt am Ende. Komme alleine nicht weiter.
 
Zuletzt bearbeitet:
Bei mir lautete die Fehlermeldung genauso wie bei dir. Jedenfalls beim Aufruf von rake db:create.

Ich hatt dann mit dem Scaffold-Generator eine Modellklasse erzeugt
Code:
ruby script/generate scaffold book title:string author:string
und in der Rails-Console versucht abzufragen wie viele Objekte dieser Klasse es gibt
Code:
Book.count
Erst dann wurde die Fehlermeldung wie in dem verlinkten Thread angezeigt, zusammen mit dem Stacktrace.

DB Benutzer und Passwort sind in database.yml richtig angegeben. Einen Symlink für /tmp/mysql.sock habe ich ebenfalls gesetzt. Wenn ich bei sock in database.yml den Pfad zum sock unter /opt/... angebe hilft das auch nicht weiter.
Ich bin mit meinem Latein echt am Ende. Komme alleine nicht weiter.

Der Eintrag in database.yml heißt eigentlich socket und nicht sock.


Da darf aber wohl nicht irgendein mysql-socket eingetragen sein, sondern (so nehme ich zumindest an) das, der aktuell laufenden Version. Das mehrmalige Installieren verschiedener MySQL-Versionen kann das wohl ein bisschen durcheinander bringen.

In der database.yml sollte dann meiner Einschätzung nach das eingetragen werden, was der folgende Befehl hervorbringt.
Code:
mysql_config --socket


Wichtig könnte noch sein, welches ruby ausgeführt wird.
Code:
which ruby
Sollte /usr/bin/ruby sein.

Als letztes fällt mir noch das alte mysql gem ein. Also 2.8 löschen und dann
Code:
gem install mysql -v 2.7
 
Der Eintrag in database.yml heißt eigentlich socket und nicht sock.
Habe mich verschrieben. In der Datei steht socket.

Der configurierte Standartsock ist der in "/opt/local/var/run/mysql5/mysqld.sock", den ich auch in database.yml angegeben habe. Dieser sollte richtig sein, da hier meine MySQL-Installation ist. Ich hab inzwischen nur noch diese Version von MySQL installiert, die anderen habe ich vollständig gelöscht.

Es wird das Ruby in "/usr/bin/ruby" ausgeführt.

Wenn ich das alte mysql installieren möchte (v2.7) kommt folgende Fehlermeldung:
Code:
Building native extensions.  This could take a while...ERROR:  Error installing mysql:
	ERROR: Failed to build gem native extension.

/opt/local/bin/ruby extconf.rb
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... 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... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Hast du RoR bei dir inzwischen zum Laufen bekommen?
 
Bei mir geht Ruby on Rails schon immer. Lediglich die Kombination mit MySQL habe ich heute zum ersten mal probiert, was dann auch seit meiner Antwort von 13:32 funktioniert. Bisher habe ich immer SQLite verwendet.

Das einzige was ich hierzu noch seit dem Clean Install von Snow Leopard installiert hatte, war MySQL 5.1 mit dem ganz normalen Installer (32 Bit x86 oder so).

Ansonsten wüsste ich jetzt nicht mehr, wie ich dir noch helfen kann.
 
Zurück
Oben Unten