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 所以请放轻松 =) 如果我遗漏了任何需要的信息,请道歉 - 让我知道更多的上下文可能会有帮助,我会尽力提供它!谢谢!
两点:
将您的 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
在您的 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
祝你好运!
我搜索了几个相关的 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 所以请放轻松 =) 如果我遗漏了任何需要的信息,请道歉 - 让我知道更多的上下文可能会有帮助,我会尽力提供它!谢谢!
两点:
将您的 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
在您的
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
祝你好运!