[英]How do I connect to a postgres database with Sequel?
當我意識到他們支持的唯一數據庫類型是PostgreSQL時,我正在使用Heroku.com制作一個Web應用程序進行部署。 到目前為止,我的應用程序(由Ruby gem Sinatra提供支持)通過.Seql gem的.Sqlite方法訪問數據庫。
這是我使用Sequel通過SQLite訪問.db文件時的Ruby腳本:
DB = Sequel.sqlite('mydatabase.db')
DB.create_table :mytable do
primary_key :id
String :column_name
end
我在學習Heroku后才安裝了PostgreSQL。 這是通過postgres的腳本(我的用戶名字面意思是'postgress',但我顯然不會在這個問題中透露我的密碼):
DB = Sequel.postgres('mydatabase.db',:user=>'postgres',:password=>'my_password_here',:host=>'localhost',:port=>5432,:max_connections=>10)
DB.create_table :mytable do
primary_key :id
String :column_name
end
但是,當我運行此代碼時,我收到以下錯誤:
C:/Ruby193/lib/ruby/gems/1.9.1/gems/sequel-3.38.0/lib/sequel/adapters/postgres.rb:208:in 'initialize': PG::Error: FATAL: database "mydatabase.db" does not exist (Sequel::DatabaseConnectionError)
我已經嘗試搜索Google,StackOverflow,Sequel文檔和Heroku幫助文檔以獲得任何幫助,但我找不到解決此問題的方法。
有誰知道我做錯了什么?
根據Pg的錯誤消息,數據庫mydatabase.db
不存在。 可能的原因:
.db
文件名后綴的mydatabase
"Mydatabase.db"
; 如果有疑問,請使用psql
連接到Pg並運行\\l
列出數據庫,或通過PgAdmin-III連接。
強烈建議使用PostgreSQL 文檔和教程 。 它們編寫得很好,一般會教你很多SQL,特別是Pg。
BTW, postgres
用戶是超級用戶。 您不應該將它用於您的應用程序; 這就像以root身份運行您的服務器,即一個非常糟糕的主意。 創建一個沒有超級用戶,createdb或createuser權限的新PostgreSQL用戶,並將其用於您的應用程序。 您可以CREATE DATABASE somedb WITH OWNER myappuser
-或最好,建立由不同的用戶擁有對你的web應用的用戶數據庫,然后expicitly GRANT
web應用程序的用戶所需的最低權限。 請參閱用戶管理和GRANT 。
在heroku上,您需要做的就是告訴Sequel
連接到DATABASE_URL環境變量的內容(這是Sequel理解的正確形成的URL):
DB = Sequel.connect(ENV['DATABASE_URL'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.