Роль не существует и не может создать базу данных при использовании PostgreSQL
Я использую Heroku для своего приложения, и для этого требуется PostgreSQL, но вы все равно можете использовать SQLite3 для разработки. Поскольку Heroku настоятельно рекомендовал не иметь 2 разных баз данных, я решил перейти на PostgreSQL для разработки. Я установил gem pg
а также пошел на официальный сайт PostgreSQL, чтобы получить установщик Windows, а также изменил мой database.yml
. Во время установки требуется пароль для PostgreSQL, поэтому я его сделал.
Я должен был изменить С помощью 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
3 ответа:
добавьте имя пользователя в свой
database.yml
, можно также использовать имя вашего приложения (или какой-то вариант имени) в качестве имени пользователя, я буду использоватьapp_name
в качестве заполнителя:development: adapter: postgresql encoding: utf8 database: app_development pool: 5 username: app_name password:
затем создайте пользователя (он же "роль") внутри PostgreSQL с помощью
psql.exe
:$ psql -d postgres postgres=# create role app_name login createdb; postgres=# \q
первая строка в вашем терминале, следующие два находятся внутри
psql
. Тогда делай своеrake db:create
.The
User
пользователь, возможно, по умолчанию, ноuser
уже забрали для другие цели в PostgreSQL, поэтому вам придется цитировать его, чтобы сохранить случай, если вы хотите использоватьUser
имя пользователя:postgres=# create role "User" login createdb;
в любом случае вам лучше создать одного пользователя для каждого приложения.
вы хотите сделать подобные вещи для вашего
test
вход вdatabase.yml
как хорошо.
PostgreSQL попытается создать базу данных с вашим именем учетной записи (логина), если a
username
Не указан в вашейconfig/database.yml
. На OS X и Linux вы можете видеть, кто это сwhoami
. Похоже, вы используете Windows.Решение A: создать пользователя PostgreSQL это соответствует тому, что он ищет. Например
createuser --superuser some_user
B Решение: Измените пользователя БД, явно установив имя пользователя как показано в МЮ ответ.