4

当我意识到他们支持的唯一数据库类型是 PostgreSQL 时,我正在制作一个使用 Heroku.com 部署的 Web 应用程序。到目前为止,我的应用程序(由 Ruby gem Sinatra 提供支持)通过 Sequel 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 之后,我安装了 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 帮助文档以获取任何帮助,但我没有找到解决此问题的方法。

有谁知道我做错了什么?

4

2 回答 2

3

根据 Pg 的错误消息,数据库mydatabase.db不存在。可能的原因:

  • 您可能的意思是mydatabase没有特定于 SQLite 的.db文件名后缀
  • 您可能创建了不同大小写的数据库,例如"Mydatabase.db"
  • 您可能正在连接到与您想象的不同的 Pg 服务器
  • 您从未创建过数据库。与 SQLite 的默认行为不同,当您尝试连接到尚不存在的数据库时,Pg 不会创建数据库。

如果有疑问,连接到 Pgpsql并运行\l以列出数据库,或通过 PgAdmin-III 连接。

强烈推荐PostgreSQL文档教程。它们写得很好,会教你很多关于一般 SQL 以及特别是 Pg 的知识。

顺便说一句,postgres用户是超级用户。您不应该将它用于您的应用程序;这就像以 root 身份运行您的服务器,即一个非常糟糕的主意。创建一个没有超级用户、createdb 或 createuser 权限的新 PostgreSQL 用户,并将其用于您的应用程序。您可以CREATE DATABASE somedb WITH OWNER myappuser- 或者最好为您的 webapp 用户创建由不同用户拥有的数据库,然后明确GRANT地为 webapp 用户创建所需的最低权限。请参阅用户管理GRANT

于 2012-08-26T23:19:08.123 回答
1

在 heroku 上,您需要做的就是告诉Sequel连接到 DATABASE_URL 环境变量的内容(这是 Sequel 理解的正确格式的 url):

DB = Sequel.connect(ENV['DATABASE_URL']) 
于 2012-08-29T15:54:05.497 回答