Ванильный доступ к MySQL из Ruby 1.9 на Snow Leopard - PullRequest
5 голосов
/ 17 января 2010

Я использую Ruby 1.9 (ruby 1.9.1p376 (2009-12-07, редакция 26041) [i386-darwin10]) на Slow Leopard (установленном через MacPorts).

Затем я установил клиентскую библиотеку Ruby MySQL через MacPorts: установить rb19-mysql

Пытаясь использовать его, я получаю следующую ошибку:

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

Мой код:

require 'mysql'
require 'pp'

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

Кажется, я здесь упускаю что-то очень простое.

Я установил правильную клиентскую библиотеку? Я правильно его использую? Я пропускаю некоторые другие зависимости?

Буду признателен, если кто-нибудь укажет мне правильное направление.

Спасибо!

Ответы [ 3 ]

1 голос
/ 07 июля 2010

То, что вы ищете:

dbh = Mysql.real_connect("localhost", "testuser", "testpass", "test")
0 голосов
/ 08 июля 2010

Ваш код выглядит для меня солидно; он очень хорошо соответствует примерам, приведенным на домашней странице rb19-mysql.

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

Что может указывать на то, что, возможно, что-то не так с установкой порта. Существовали всевозможные проблемы, связанные с тем, что MacPorts не работал должным образом после обновления снежного барса. Вы стали жертвой этого? Мне пришлось восстановить все мои порты, прежде чем они работали должным образом.

Также (и я знаю, что для некоторых это похоже на религию), вы можете подумать о том, чтобы отказаться от версии MacPort и просто взять самоцвет MySql. По какой-то причине использование драгоценных камней стало для меня гораздо более приятным опытом.

Надеюсь, это поможет - удачи!

0 голосов
/ 17 января 2010

Я никогда не писал ни одной строки Ruby в своей жизни, так что, возможно, я собираюсь смущаться, но разве вам не нужно сначала инициализировать Mysql? Я совершенно уверен, что тот факт, что функция ожидает 0 параметров, означает, что она еще не существует.

В тестовом файле пакета, который вы упоминаете (вы меня заинтересовали), я вижу следующую строку:

 assert_nothing_raised{@m = Mysql.init} 

однако, ваш синтаксис кажется правильным. Из того же тестового файла

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

Я бы предположил, что сначала вам нужно сделать Mysql.init().

Если я ошибаюсь, дайте мне знать, и я удалю ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...