Как устранить неполадки драйвера Postgres и DBI для Ruby? - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь заставить Postgre DBI работать с Ruby, и пока не нашел официального ответа, но надеюсь найти здесь помощь ...

Вот код, выдающий ошибку:

#!/usr/bin/ruby
require 'pg'

$maxwidth=12

conn = PGconn.connect("localhost", 5432, '', '', "testdb", "caseyr", "genesrule")

###### DROP ANY EXISTING rocks TABLE ######
    begin
        res = conn.exec("SELECT id FROM rocks;")
    rescue  # rocks table doesn't exist -- this is legitimate
    else    # rocks table exists, so delete it
        puts 'DELETING rocks...'
        res = conn.exec("DROP TABLE rocks;")
    end

###### CREATE AND POPULATE rocks TABLE ######
begin
    res = conn.exec("CREATE TABLE rocks (id serial, rockname char(20));")
    res = conn.exec("INSERT INTO ROCKS (rockname) values ('Diamond');")
    res = conn.exec("INSERT INTO ROCKS (rockname) values ('Ruby');")
    res = conn.exec("INSERT INTO ROCKS (rockname) values ('Emerald');")
rescue Pgconn::PGError => e
    puts "Error creating and filling rocks table."
    puts "Error code: #{e.err}"
    puts "Error message: #{e.errstr}"
    conn.close() if conn
end

А вот и сообщение об ошибке:

ruby testRocks.rb 
DELETING rocks...
NOTICE:  CREATE TABLE will create implicit sequence "rocks_id_seq" for serial column "rocks.id"

testRocks.rb:35: uninitialized constant Pgconn (NameError)

Я не уверен в правильности имени класса для использования; Pgconn было предположение.

Но дальнейшее тестирование показывает, что этот простой тест также не удался:

#!/usr/bin/ruby
require 'postgres'

Что не получается с:

ruby basictest.rb 
basictest.rb:2:in `require': no such file to load -- postgres (LoadError)
    from basictest.rb:2

Теперь я думаю, что у меня установлен postgres gem:

gem list | grep post
postgres (0.7.9.2008.01.28)
postgres-pr (0.6.3)

Итак, я в растерянности относительно

  1. у меня установлен правильный драйвер Postgres и установлен DBI?
  2. почему моя первая тестовая программа не работает?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Может ли быть так просто, как Pgconn::PGError, когда вы просто имеете в виду PGError?Это:

rescue Pgconn::PGError => e

должно быть

rescue PGError => e

И вы хотите:

require 'pg'

как в первом примере, а не require 'postgres'.

Документация онлайн:

http://rubydoc.info/gems/pg/0.11.0/frames

0 голосов
/ 02 декабря 2011

Требуется RubyGems, прежде чем вам понадобится драгоценный камень PG, например,

require 'rubygems'
require 'pg'
...