2009-09-15 13 views
5

Ich habe Probleme mit MySQL-Abfragen in Ruby. Ich benutze 'mysql' gem.Mehrere MySQL-Abfragen mit Ruby

Die Konfiguration wird in einer separaten YML-Datei gespeichert und in die Variable @conf geladen. Dies ist mein Code:

# connect to the database 
Mysql::new(@conf['sql_host'], @conf['sql_user'], @conf['sql_password'], @conf['sql_base']) 

# it's ok when we're doing this 
my.query("SELECT * FROM `my_table`") do |e| 
    # code 
end 

# Maybe, I've missed something here... 

# really this query will insert value into other table, used SELECT just for testing 
# this throws exception: 'query: not connected' 
my.query("SELECT * FROM `my_table_2`") 

Windows XP
Rubin 1.8.6 (2008-08-11 Patchlevel 287) [i386-mswin32]
mysql (2.8.1, 2.7.3)
MySQL Clientversion: 5.0.51a

Zweite Abfrage löst 'Abfrage: nicht verbunden'.

Antwort

7

Zunächst sieht Ihr Programm in Ordnung. Ich bin 100% sicher, dass Sie libmysql.dll Version Problem haben.

Ich kann dies mit libmysql.dll vom Mysql Installer reproduzieren.

Diese Datei herunterladen und ersetzen in c: \ ruby ​​\ bin \

http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll

und starten Sie das Programm ohne Änderung.

Verwandte Ausgabe und Kredit here

+0

Großartig! Vielen Dank! Ich hatte libmysql Probleme vorher, aber kopiert es von meiner Mysql-Installation - nicht von Rubyforge. Es klappt! JA! – Andrew

+0

Danke Jirapong. Um das Problem zu beheben, wird eine 5.0.x-Bibliothek funktionieren. Ich benutze 5.1.42 Server und die 5.0.4 libmysql.dll in Ruby/bin. – Sixty4Bit

+0

DANKE! Ich habe den ganzen Tag mit einigen verschiedenen ORM-Wrappern versucht und letztendlich aufgegeben, das Ruby Mysql direkt zu benutzen, und bin auf das gleiche Problem gestoßen. Es stellte sich heraus, dass es auch die falsche Version für mich war, diese hat es gelöst :-) – Mika

0

Ich habe in unermesslichen Probleme bei dem Versuch, Ruby mysql Edelstein auf einer beliebigen Version von Windows zu verwenden. Von dem, was ich sagen kann, es funktioniert einfach nicht, es sei denn, Sie können herausfinden, wie Sie es selbst kompilieren (was ein königlicher Schmerz in den Arsch ist).

Haben Sie darüber nachgedacht, ActiveRecord als Ihre ORM-Ebene (object relational mapping) zu verwenden und mit SQLite oder einer anderen Datenbank unter Windows zu arbeiten und dann die Produktionsumgebung unter Linux mit MySQL auszuführen? Das ist die Lösung, die ich mir vor einiger Zeit genommen habe und es hat ganz gut geklappt.

+0

Das Hauptproblem ist, dass Datenbank bereits erfolgt ist und ausgeführt wird. Ich schreibe ein kleines Tool für diese Basis. Ich muss nur Datenbankabfragen ausführen. Gibt es eine andere Möglichkeit, dies zu tun? – Andrew

Verwandte Themen