2010-01-17 10 views
5

Ich starte Ruby 1.9 (Ruby 1.9.1p376 (2009-12-07 Revision 26041) [i386-Darwin10]) auf Slow Leopard (über MacPorts installiert).Vanilla MySQL Zugriff von Ruby 1.9 auf Snow Leopard

Ich installierte dann die Ruby-MySQL-Client-Bibliothek über MacPorts: RB19-mysql

Der Versuch, es zu benutzen, ich installieren erhalten folgende Fehlermeldung:

 
db.rb:4:in `initialize': wrong number of arguments(4 for 0) (ArgumentError) 
    from db.rb:4:in `new' 
    from db.rb:4:in `' 

Mein Code:

require 'mysql' 
require 'pp' 

dbh = Mysql.new("localhost", "testuser", "testpass", "test") 
puts "Server version: " + dbh.get_server_info 

Es scheint, als würde ich hier etwas sehr Grundlegendes vermissen.

Habe ich die richtige Client-Bibliothek installiert? Ich benutze es richtig? Fehle ich einige andere Abhängigkeiten?

Würde mich freuen, wenn mir jemand in die richtige Richtung zeigen könnte.

Danke!

+4

Ist "Slow Leopard" ein OS X Insider-Witz oder ein Tippfehler? Wenn es ein Tippfehler ist, ist es ein Freudscher? :) –

+0

Slow err Snow Leopard ist schnell genug für mich .. Typo in der Tat :) – deepakg

+0

Aber es kann langsamer als Win XP bekommen ... – Jaryl

Antwort

0

Ich habe noch nie eine Zeile von Ruby in meinem Leben geschrieben, also werde ich mich vielleicht in Verlegenheit bringen, aber müssen Sie nicht zuerst Mysql initialisieren? Ich bin mir ziemlich sicher, dass die Funktion, die 0 Parameter erwartet, bedeutet, dass sie noch nicht existiert.

In der Testdatei des Pakets Sie erwähnen (Sie haben mich neugierig), sehe ich die folgende Zeile:

assert_nothing_raised{@m = Mysql.init} 

Ihre Syntax scheint jedoch richtig, zu sein. Aus der gleichen Testdatei

assert_nothing_raised{@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)} 

Ich würde annehmen, dass Sie ein Mysql.init() zuerst tun müssen.

Wenn ich falsch liege, lass es mich wissen und ich werde die Antwort entfernen.

+0

Kein Glück. db.rb: 4: in '

': undefinierte Methode' init' für Mysql: Klasse (NoMethodError) Mysql.init() – deepakg

+0

Dann haben Sie möglicherweise das falsche Paket installiert. Oder Sie müssen diese Klasse auf irgendeine Weise initialisieren oder laden, von der ich nichts weiß. Schade! –

1

Was Sie suchen ist:

dbh = Mysql.real_connect("localhost", "testuser", "testpass", "test") 
0

Ihr Code mir solide aussieht; Es passt sehr gut zu den Beispielen auf der rb19-mysql Homepage.

my = Mysql.new(hostname, username, password, databasename) 
st = my.prepare("insert into tblname (col1,col2,col3) values (?,?,?)") 
st.execute("abc",123,Time.now) 
st.prepare("select col1,col2,col3 from tblname") 
st.execute 
st.fetch # => ["abc", 123, #<Mysql::Time:2005-07-24 23:52:55>] 
st.close 

Was scheint zu zeigen, dass es wahrscheinlich etwas nicht richtig mit der Port-Installation ist. Es gab alle möglichen Probleme mit MacPorts, die nach Schneeleopard-Upgrades nicht richtig funktionierten - fällst du dem Opfer? Ich musste alle meine Ports neu aufbauen, bevor sie richtig funktionierten.

Auch (und ich weiß, dass dies wie Religion zu einigen Leuten ist), möchten Sie möglicherweise erwägen, die MacPort-Version zu verlassen und nur den MySql-Edelstein zu greifen. Aus welchen Gründen auch immer, die Verwendung der Edelsteine ​​war eine viel angenehmere Erfahrung für mich.

Hoffe, dass hilft - viel Glück!