Ruby i DBI

Witam,
Mam kolejny problem zwiazany z programowaniem w samym Ruby.
Tzn napisalem sobie prostego bot’a do IRC ma za zadanie polaczyć się z kanałem ( i to robi) ale jego druga misja to, zeby logował wszystko co się dzieje na kanale do bazy.

[code]require ‘socket’
require ‘dbi’

sock = TCPSocket.new(‘irc.serv.com’,6667)
sock.puts(“USER simpleRubyBot lorem ipsum dolor”)
sock.puts(“NICK bubus13244”)
sock.puts(“JOIN #chan”)

db = DBI.connect(“DBI:Mysql:irc:localhost”,“root”,“h4sl0h0st1ng”)

loop do
msg = sock.gets
puts msg if msg != nil
@db.do(“INSERT INTO messages (messages) VALUES (#{msg})”)

end[/code]
Po odpaleniu skryptu: roby bot.rb dostaje o to taki błąd

bash-3.1$ ruby bot.rb :TheGame.lcirc.net NOTICE AUTH :*** Looking up your hostname... bot.rb:14: undefined method `do' for nil:NilClass (NoMethodError) from bot.rb:11:in `loop' from bot.rb:11 bash-3.1$
gdy zachaszyje linijke @db.do(“INSERT INTO messages (messages) VALUES (#{msg})”)
to bot siedzi na ircu, a tak niestetyu tylko wchodzi i skrypt sie wylancza.

Ktoś wie dlaczego??

Połączenie przypisujesz do zmiennej db, a zapytanie wykonujesz na zmiennej @db - to są 2 różne zmienne, pierwsza to zmienna lokalna, druga to zmienna instancji. Poczytaj pierwszą lepszą książkę o programowaniu w ruby i pewnie się dowiesz o chodzi.

Przy okazji, jeżeli będziesz robił coś więcej niż 1 insert to lepiej zacznij używać jakiegoś ORMa - Sequel, Datamapper, ActiveRecord. Są używane najczęściej z frameworkami, ale do aplikacji konsolowych też bez problemu można je podpiąć.

Tak na szybko, to zmienna instancji @db jest pusta, zdefiniowales tylko zmienna lokalna ‘db’.