Ruby PG gem 连接问题

Ruby PG gem connection issue

我搜索了几个相关的 post 来寻找我遇到的问题,但没有找到答案。我是大多数人使用 Mac 的编码程序的学生,但我在 Windows ( 7, Pro, 64 ) - 因此我有点被 [= =31=] 我会 post 在这里。

我正在尝试通过 Ruby 与 pg gem 打开连接,并且我正在使用 Sinatra 和 PostgreSQL。我已经为 PostgreSQL 建立了服务器、数据库和配置路径变量,并且我已经成功安装了 pg gem(没有像其他一些 post 那样的问题)该行:

gem install pg -- --with-pg-config=C:\Program Files\PostgreSQL.5\bin

所以问题是当我启动 Sinatra 并转到本地主机时, 我得到一个 NoMethodError,nil:NilClass 的未定义方法,该方法原本适用于 Mac 用户。

方法是:

configure :development do
  set :db_config, { dbname: "news_aggregator_development" }
end

configure :test do
  set :db_config, { dbname: "news_aggregator_test" }
end

def db_connection
  begin
    connection = PG.connect(Sinatra::Application.db_config)
    yield(connection)
  ensure
    connection.close
  end
end

get '/articles' do
  @results = db_connection do |conn|
    conn.exec("SELECT * FROM articles")
  end
  erb :index
end

connection returns nil,因此 close 方法 returns 出现未定义的方法错误。我不认为存在语法错误,因为我已经就此与其他人核实过,而且我认为这可能与 pg 的连接错误有关。

第一次 post 所以请放轻松 =) 如果我遗漏了任何需要的信息,请道歉 - 让我知道更多的上下文可能会有帮助,我会尽力提供它!谢谢!

两点:

  1. 将您的 Sinatra 助手包装在 helpers {} 块中。这将允许您使用 settings.db_config 而不是 Sinatra::Application.db_config:

    helpers do
      def db_connection
        connection = PG.connect(settings.db_config)
        yield connection
      ensure
        connection.close
      end
    end
    
  2. 在您的 PG.connect 调用中,您应该传递主机、用户、密码以及 pg gem 查找、连接和验证所需的任何其他选项你的实例。仅 dbname 是不够的——至少在 Windows 上是不够的。

    configure :development do
      set :db_config, {
        host: "localhost",
        port: 5432, 
        user: "foo",
        password: "bar",
        dbname: "news_aggregator_development"
      }
    end
    

祝你好运!