4

サポートしているデータベースの種類がPostgreSQLだけであることに気付いたとき、Heroku.comを使用してデプロイするWebアプリを作成していました。これまで、私のアプリ(Ruby gem Sinatraを搭載)は、Sequelgemの.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ヘルプドキュメントでヘルプを検索してみましたが、この問題の修正は見つかりませんでした。

誰かが私が間違っていることを知っていますか?

4

2 に答える 2

3

Pgからのエラーメッセージによると、データベースmydatabase.dbは存在しません。考えられる理由:

  • あなたはおそらくmydatabaseSQLite固有の.dbファイル名サフィックスなしを意味しました
  • 別のケースでデータベースを作成した可能性があります"Mydatabase.db"
  • 思っているのとは別のPgサーバーに接続している可能性があります
  • データベースを作成したことはありません。SQLiteのデフォルトの動作を解除すると、まだ存在していないデータベースに接続しようとしても、Pgはデータベースを作成しません。

疑わしい場合は、データベースを一覧表示するためにPgに接続してpsql実行\lするか、PgAdmin-IIIを介して接続してください。

PostgreSQLのドキュメントチュートリアルも強くお勧めします。それらはよく書かれており、SQL全般、特にPgについて多くのことを教えてくれます。

ところで、postgresユーザーはスーパーユーザーです。アプリケーションに使用しないでください。これは、サーバーをrootとして実行するようなものです。つまり、非常に悪い考えです。スーパーユーザー、createdb、またはcreateuser権限のない新しいPostgreSQLユーザーを作成し、それをアプリケーションに使用します。CREATE DATABASE somedb WITH OWNER myappuserWebappユーザーとは別のユーザーが所有するデータベースを作成してから、必要最小限の権限を明示的にWebappユーザーに作成することができますGRANTユーザー管理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 に答える