当我意识到他们支持的唯一数据库类型是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,续集文档和Heroku帮助文档以获取任何帮助,但我找不到解决此问题的方法。
有谁知道我做错了什么?
答案 0 :(得分:3)
根据Pg的错误消息,数据库mydatabase.db
不存在。可能的原因:
mydatabase
没有特定于SQLite的.db
文件名后缀"Mydatabase.db"
; 如果有疑问,请使用psql
连接到Pg并运行\l
列出数据库,或通过PgAdmin-III连接。
强烈建议使用PostgreSQL documentation和tutorial。它们编写得很好,一般会教你很多SQL,特别是Pg。
BTW,postgres
用户是超级用户。您不应该将它用于您的应用程序;这就像以root身份运行您的服务器,即一个非常糟糕的主意。创建一个没有超级用户,createdb或createuser权限的新PostgreSQL用户,并将其用于您的应用程序。您可以CREATE DATABASE somedb WITH OWNER myappuser
- 或者最好,为您的webapp用户创建不同用户拥有的数据库,然后向webapp用户明确GRANT
所需的最低权限。请参阅user management和GRANT。
答案 1 :(得分:1)
在heroku上,您需要做的就是告诉Sequel
连接到DATABASE_URL环境变量的内容(这是Sequel理解的正确形成的URL):
DB = Sequel.connect(ENV['DATABASE_URL'])