J'utilise Heroku pour mon application et cela nécessite PostgreSQL mais vous pouvez toujours utiliser SQLite3 pour le développement. Comme Heroku déconseille fortement d'avoir 2 bases de données différentes, j'ai décidé de passer à PostgreSQL pour le développement. J'ai installé le gem pg
et est également allé sur le site officiel de PostgreSQL pour obtenir le programme d'installation de Windows et a également changé mon database.yml
. Lors de l'installation, il nécessite un mot de passe pour PostgreSQL, j'en ai donc créé un. J'ai dû changer le pg_hba.conf
fichier à partir de md5
à trust
pour passer: fe_sendauth: no password supplied
lorsque vous essayez de créer la base de données.
# 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
Après m'être débarrassé de cela, je comprends maintenant ceci:
$ 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}
J'ai toujours mon development.sqlite3
et text.sqlite3
présent, cela pourrait-il être le problème? Que faut-il faire?
Voici mon Gist complet: https://Gist.github.com/1522188
Ajoutez un nom d'utilisateur à votre database.yml
, pourrait tout aussi bien utiliser le nom de votre application (ou une variante du nom) comme nom d'utilisateur, j'utiliserai app_name
comme espace réservé:
development:
adapter: postgresql
encoding: utf8
database: app_development
pool: 5
username: app_name
password:
Créez ensuite l'utilisateur (AKA "rôle") dans PostgreSQL en utilisant psql.exe
:
$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q
La première ligne est dans votre terminal, les deux suivantes sont à l'intérieur de psql
. Faites ensuite votre rake db:create
.
L'utilisateur User
est peut-être un utilisateur par défaut mais user
est déjà utilisé à d'autres fins dans PostgreSQL, vous devrez donc le citer pour conserver la casse si vous le souhaitez utilisez User
comme nom d'utilisateur:
postgres=# create role "User" login createdb;
Vous feriez mieux de créer un utilisateur par application de toute façon.
Vous voudrez faire des choses similaires pour votre entrée test
dans database.yml
ainsi que.
PostgreSQL essaiera de créer la base de données avec votre nom de compte (login) si un username
n'est pas spécifié dans votre config/database.yml
. Sous OS X et Linux, vous pouvez voir qui c'est avec whoami
. On dirait que vous utilisez Windows.
Solution A: Créer un utilisateur PostgreSQL qui correspond à celui qu'il recherche. Par exemple
createuser --superuser some_user
Solution B: Modifiez l'utilisateur DB en définissant explicitement un nom d'utilisateur comme indiqué dans la réponse de m .
Si vous avez un compte/utilisateur spécifique sur votre machine pour postgres appelé postgres par exemple.
Ensuite, l'exécution de cette commande vous invitera à entrer un nom de rôle.
Sudo -u postgres createuser --interactive
Puis faire
rake db:create
Devrait marcher!