web-dev-qa-db-fra.com

rake db: create throws "la base de données n'existe pas" erreur avec postgresql

J'utilise Rails 4.1.5 avec postgresql 9.1 sous Debian 7, et je ne suis pas en mesure de créer une base de données dans mon environnement de développement. Lorsque j'exécute

bin/rake db:create

Je reçois

home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:898:in `rescue in connect': FATAL:  database "direct-dev" does not exist
Run `$ bin/rake db:create db:migrate` to create your database (ActiveRecord::NoDatabaseError)
from /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:888:in `connect'
from ...

J'essaie de créer la base de données donc, naturellement, elle n'existe pas. Cependant Rails devrait le créer ... Voici ma config/database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: direct-dev

Et voici une partie du journal postgresql:

2014-09-01 19:30:40 CEST LOG:  connection received: Host=[local]
2014-09-01 19:30:40 CEST LOG:  connection authorized: user=rs database=direct-dev
2014-09-01 19:30:40 CEST FATAL:  database "direct-dev" does not exist

Avez-vous des pointeurs? J'y suis depuis plus d'une heure et je ne comprends toujours pas pourquoi cela se produit ...

Merci!

52
Rodrigo Serrano

Rails 4.1 livré avec préchargeur à ressort , et

Les nouvelles applications Rails 4.1 seront livrées avec des binstubs "Springified". Cela signifie que bin/Rails et bin/rake tireront automatiquement parti des environnements de printemps préchargés.

ce qui signifie que le "springified" bin/rake tentera de précharger l'application, qui à son tour tentera d'exécuter les initiateurs, ce qui entraînera le problème que vous voyez.

Pour résoudre/contourner ce problème, vous souhaitez exécuter les tâches de râteau de configuration initiale sans ressort. Une façon d'y parvenir est de l'exécuter avec bundler à la place:

bundle exec rake db:create
100
artm

J'ai trouvé le problème ...

Cela a à voir avec Rails initialiseurs: Rails semble charger tous les initialiseurs avant d'exécuter bin/rake db:create.

Et, dans cette application particulière, il existe quelques initialiseurs personnalisés qui dépendent d'un modèle ActiveRecord (qui, à son tour, dépend de la base de données créée, disponible et avec la table correspondante).

Par conséquent, le râteau n'arrive jamais à exécuter réellement la tâche, il échoue lors de l'exécution des initialiseurs. J'aurais dû savoir si j'avais lu attentivement le journal des messages d'erreur complet. Voici le journal complet (voir ci-dessous, en gras, les lignes incriminées):

/home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb: 898: dans `rescue in connect ': FATAL: la base de données "ds-dev" n'existe pas 
 Exécutez `$ bin/rake db: create db: migrate` pour créer votre base de données (ActiveRecord :: NoDatabaseError) 
 à partir de /home/rs/.rvm /gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:888:in `connect '
 de /home/rs/.rvm/gems/Ruby -2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb: 568: dans `initialize '
 À partir de /home/rs/.rvm/gems/Ruby-2.1.2 /gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `new '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord -4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb: 41: dans `postgresql_connection '
 Depuis /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_p ool.rb: 435: dans `new_connection '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool. rb: 445: dans `checkout_new_connection '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb: 416: dans `acquisition_connexion" 
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:351: dans `block in checkout '
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/monitor.rb:211:in` mon_synchronize' 
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:350:in `checkout '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:265:in `block in connection '
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/monitor.rb:211:in `m on_synchronize '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:264:in `connection' 
 dans /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:541:in `retrieve_connection '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_handling.rb:113:in `retrieve_connection '
 de/home /rs/.rvm/gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_handling.rb:87:in `connection '
 de /home/rs/.rvm/ gems/Ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/model_schema.rb: 209: dans `table_exists? '
depuis /home/rs/pr/ds/app/models/property.rb:32:in `get '
 depuis /home/rs/pr/ds/config/initializers/custom/setup_mail.rb:3 : dans ''
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:241:in `load '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:241:in `block in load '
 from/home/rs /.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:232:in `load_dependency '
 de /home/rs/.rvm/gems/ Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb: 241: dans `load '
 Depuis /home/rs/.rvm/gems/Ruby-2.1.2/ gems/railties-4.1.5/lib/Rails/engine.rb: 648: dans `block in load_config_initializer '
 from /home/rs/.rvm/gems/Ruby-2.1.2/gems/activesupport- 4.1.5/lib/active_support/notifications.rb: 161: dans `instrument '
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1.5/lib/ Rails/engine.rb: 647: dans `load_config_initializer '
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1.5/lib/Rails/engine.rb: 612: dans `bloc (2 niveaux) dans '
 Depuis /home/rs/.rvm/gems/Ruby-2.1.2 /gems/railties-4.1.5/lib/Rails/engine.rb:611:in `each '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1 .5/lib/Rails/engine.rb: 611: dans `block in '
 Depuis /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1.5/lib/ Rails/initializable.rb: 30: dans `instance_exec '
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1.5/lib/Rails/initializable.rb: 30: dans `run '
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1.5/lib/Rails/initializable.rb:55:in` block in run_initializers '
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:226:in `block in tsort_each' 
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component '
 de/home/rs /.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:418:in `block (2 levels) in each_strongly_connected_component_from '
 de /home/rs/.rvm/ rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb: 427: dans `each_strongly_connected_component_from '
 de /home/rs/.rvm/rub ies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb: 417: dans `block in each_strongly_connected_component_from '
 de /home/rs/.rvm/gems/Ruby-2.1.2/ gems/railties-4.1.5/lib/Rails/initializable.rb: 44: dans `chaque '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/railties-4.1. 5/lib/Rails/initializable.rb: 44: dans `tsort_each_child '
 De /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb: 411: dans `call '
 De /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:411:in` each_strongly_connected_component_from' 
 depuis /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component '
 depuis/home/rs /. rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb: 345: dans `chaque" 
 de /home/rs/.rvm/rubies/Ruby-2.1.2/ lib/Ruby/2.1.0/tsort.rb: 345: dans `call '
 depuis /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort. rb: 345: dans `each_strongly_connected_component '
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:224:in` tsort_each' 
 depuis /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/tsort.rb:205:in `tsort_each '
 depuis /home/rs/.rvm/gems /Ruby-2.1.2/gems/railties-4.1.5/lib/Rails/initializable.rb:54:in `run_initializers '
 De /home/rs/.rvm/gems/Ruby-2.1.2 /gems/railties-4.1.5/lib/Rails/application.rb:300:in `initialize! '
 de /home/rs/pr/ds/config/environment.rb:5:in' ' 
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:247:in `require '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:247:in `block in require '
 from/home/rs /.rvm/gems/Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:232:in `load_dependency '
 de /home/rs/.rvm/gems/ Ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb: 247: dans `require '
 De /home/rs/.rvm/gems/Ruby-2.1.2/ gems/spring-1.1.3/lib/spring/application.rb: 92: dans `preload '
 de /home/rs/.rvm/gems/Ruby-2.1.2/gem s/spring-1.1.3/lib/spring/application.rb: 140: dans `serve '
 dans /home/rs/.rvm/gems/Ruby-2.1.2/gems/spring-1.1. 3/lib/spring/application.rb: 128: dans `block in run '
 De /home/rs/.rvm/gems/Ruby-2.1.2/gems/spring-1.1.3/lib/ spring/application.rb: 122: en `boucle '
 depuis /home/rs/.rvm/gems/Ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb: 122: dans `run '
 Depuis /home/rs/.rvm/gems/Ruby-2.1.2/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in` '
 de /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
 from /home/rs/.rvm/rubies/Ruby-2.1.2/lib/Ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require '
 from -e: 1: dans '' 

Je vais travailler sur la refactorisation du code, afin de se débarrasser de toutes les dépendances du modèle dans les initialiseurs (ce qui, je suis sûr que ce doit être une très mauvaise pratique).

22
Rodrigo Serrano

Vous pourriez essayer d'exécuter cette commande-

bin/rake db:create Rails_ENV=development

Ou cette commande-

bin/rake db:migrate Rails_ENV=development
13
nrako

Aucune des solutions n'a fonctionné pour moi, mais cela a fonctionné pour moi.

$ brew services list
$ brew services restart postgresql
2
Clement

Eu le même problème aujourd'hui (sous OS X).

Résolu avec:

psql -U postgres
CREATE ROLE rolename WITH CREATEDB LOGIN;

Utilisation \du pour vérifier s'il est créé.

Utilisation \password rolename pour créer un mot de passe pour cet utilisateur/rôle .

Ensuite, vous pouvez configurer DB avec bundle exec rake db:migrate

2
lucasarruda

Je vois deux problèmes, comme is04 l'a souligné, vous avez probablement besoin d'au moins une valeur username dans votre database.yml.

Vous devez également créer le rôle postgres:

su - postgres
create role direct-dev with createdb login password 'password1'
1
Jason Noble

Aucune des solutions n'a fonctionné pour moi, mais j'ai ensuite vu que certaines réponses mentionnaient le préchargement comme faisant partie du problème. J'ai réalisé que j'avais config.eager_load = true dans config/environments/development.rb. Je l'ai changé en faux et cela a résolu le problème.

1
Max