1

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. 上記の最初のテスト プログラムが失敗するのはなぜですか?
4

2 に答える 2

2

Pgconn::PGErrorあなたが意味するのと同じくらい簡単PGErrorでしょうか?これ:

rescue Pgconn::PGError => e

する必要があります

rescue PGError => e

そして、あなたが望む:

require 'pg'

最初のサンプルのように、ではありませんrequire 'postgres'

ドキュメントはオンラインです:

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

于 2011-12-02T01:08:42.050 に答える
0

PG gem を要求する前に RubyGems を要求します。

require 'rubygems'
require 'pg'
于 2011-12-02T01:14:54.077 に答える