アプリケーションにHerokuを使用していますが、PostgreSQLが必要ですが、開発にはSQLite3を使用できます。 Herokuは2つの異なるデータベースを持つことを強く推奨していたため、開発のためにPostgreSQLに変更することにしました。 gem pg
をインストールした後、公式のPostgreSQLサイトにアクセスしてWindowsインストーラーを取得し、database.yml
も変更しました。インストール時にPostgreSQLのパスワードが必要なので、作成しました。 pg_hba.conf
ファイルをmd5
からtrust
に変更して、データベースを作成しようとしたときにfe_sendauth: no password supplied
を通過する必要がありました。
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 trust # was md5
# IPv6 local connections:
Host all all ::1/128 trust # was md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#Host replication postgres 127.0.0.1/32 trust
#Host replication postgres ::1/128 trust
しかし、それを取り除いた後、私は今これを取得します:
$ rake db:create
(in C:/app)
FATAL: role "User" does not exist
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8",
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil}
development.sqlite3
とtext.sqlite3
がまだ存在しますが、それが問題になる可能性がありますか?何をする必要がありますか?
ここに私の完全な要点があります: https://Gist.github.com/1522188
ユーザー名をdatabase.yml
に追加します。アプリケーションの名前(または名前の変形)をユーザー名として使用することもできます。プレースホルダーとしてapp_name
を使用します。
development:
adapter: postgresql
encoding: utf8
database: app_development
pool: 5
username: app_name
password:
次に、psql.exe
を使用してPostgreSQL内にユーザー(別名「ロール」)を作成します。
$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q
最初の行はターミナルにあり、次の2行はpsql
の中にあります。次に、rake db:create
を実行します。
User
ユーザーはデフォルトかもしれませんが、PostgreSQLの他の目的では user
はすでに使用されています です。ユーザー名としてUser
を使用します。
postgres=# create role "User" login createdb;
とにかく、アプリケーションごとに1人のユーザーを作成する方が良いでしょう。
database.yml
のtest
エントリにも同様のことをしたいと思うでしょう。
username
がconfig/database.yml
で指定されていない場合、PostgreSQLはアカウント(ログイン)名でデータベースを作成しようとします。 OS XおよびLinuxでは、whoami
でこれが誰であるかを確認できます。 Windowsを使用しているようです。
ソリューションA:PostgreSQLユーザーの作成 探しているものと一致します。例えば
createuser --superuser some_user
解決策B:明示的にユーザー名を設定して、DBユーザーを変更します muの答えに示すように 。
たとえば、postgresと呼ばれるpostgresのマシンに特定のアカウント/ユーザーがいる場合。
次に、このコマンドを実行すると、ロール名を入力するプロンプトが表示されます。
Sudo -u postgres createuser --interactive
それから
rake db:create
動作するはずです!