![](/img/trans.png)
[英]How do you use send_query of the PG::Connection class in the Ruby pg gem?
[英]Ruby PG gem connection issue
我已經在幾個相關的帖子中搜索了我遇到的問題,但找不到答案。 我是大多數人都使用Mac的編碼程序的學生,但是我使用的是Windows(7,Pro,64)-因此,我對這里將要發布的工具/軟件有一定的限制。
我正在嘗試通過pg gem通過Ruby打開連接,並且正在使用Sinatra和PostgreSQL。 我已經為PostgreSQL建立了服務器,數據庫和配置路徑變量,並且已經成功安裝了pg gem(在其他一些帖子中沒有問題):
gem install pg -- --with-pg-config=C:\\Program Files\\PostgreSQL\\9.5\\bin
因此,問題在於,當我啟動Sinatra並轉到本地主機時,在適用於Mac用戶的方法上,出現了nil:NilClass的NoMethodError,Undefined Method。
方法是:
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的連接錯誤有關。
第一次發布,因此請對我輕松一點=)如果我遺漏了任何必要的信息,我們深表歉意-讓我知道還有什么其他背景可能會有所幫助,我將盡力提供! 謝謝!
兩點:
將您的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
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.