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!
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
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).
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
Aucune des solutions n'a fonctionné pour moi, mais cela a fonctionné pour moi.
$ brew services list
$ brew services restart postgresql
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
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'
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.