我已经搜索了几个相关的帖子,因为我遇到了但无法找到答案的问题。我是一名编程程序的学生,其中大多数人使用Mac,但我使用的是Windows(7,Pro,64) - 因为我已经锁定了工具/软件我&# 39;将在这里发布。
我试图通过Ruby使用pg gem打开连接,并且我正在使用Sinatra和PostgreSQL。我已经为PostgreSQL建立了服务器,数据库和配置路径变量,并且我已经成功安装了pg gem(在其他一些帖子中没有问题):
gem install pg -- --with-pg-config=C:\Program Files\PostgreSQL\9.5\bin
所以问题是当我启动Sinatra并转到localhost时, 我得到一个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
返回nil
,因此close
方法返回未定义的方法错误。我并不认为存在语法错误,因为我已与其他人就此进行了检查,并且我认为它可能与pg的连接错误有关。
第一次发帖所以请放轻松我=)如果我遗漏了任何所需信息,请致歉 - 让我知道更多上下文可能会有所帮助,我会尽力提供!谢谢!
答案 0 :(得分:0)
两点:
将您的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