2014-09-01 20 views
41

Sto usando i binari 4.1.5 con postgresql 9.1 in Debian 7 e non riesco a creare un database nel mio ambiente di sviluppo. Quando eseguorake db: create throws errore "database inesistente" con postgresql

bin/rake db:create 

ottengo

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 ... 

Sto cercando di creare il database così, naturalmente, non esiste. Tuttavia le rotaie dovrebbero crearlo ... Ecco il mio config/database.yml:

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

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

Ed ecco una parte del log di 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 

Avete qualsiasi puntatori? Sono stato a questo per più di un'ora, e ancora non riesco a capire perché questo sta accadendo ...

Grazie!

+0

cosa dire 'username' e' passowrd'? – IS04

+0

Penso che non sia vero: sto usando il metodo di autenticazione "peer" postgresql; comunque, nel caso, ho anche aggiunto 'username' e' password' a database.yml, e ho ancora lo stesso errore. Penso anche che, se si trattasse di un problema di autenticazione, postgres avrebbe lamentato l'utente non esistente prima di lamentarsi del db. –

risposta

1

Vedo due problemi, come sottolineato in04 probabilmente è necessario almeno un valore username nel database.yml.

È inoltre necessario creare il ruolo postgres:

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

Ho provato, ma penso che non sia vero: il ruolo era già stato creato (come un superadmin, in realtà), e sto usando il metodo di autenticazione "peer" postgrsql. Ho provato ad aggiungere solo un 'username', e sia' username' che 'password' a database.yml in ogni caso, e ho ancora lo stesso errore. –

+0

Per quanto ne so, la migrazione creerà automaticamente db per SQLite e Postgres per crearlo da solo su sviluppo e altri ambienti. – PatNowak

+0

Non è corretto. Le impostazioni predefinite delle rotte all'utente del sistema operativo che inizializza il database come il modello predefinito 'database.yml' spiega: https://github.com/rails/rails/blob/d7f9adf7941574d0a40a165739938d28f278bd77/railties/lib/rails/generators/rails/app/ templates/config/database/postgresql.yml.tt # L28-L32. Quindi 'whoami' è usato come predefinito credo. 'psql postgres -U \' whoami \ '' dovrebbe funzionare se il database è stato inizializzato con l'utente corretto. –

6

ho trovato il problema ...

Ha a che fare con Rails inizializzatori: Rails sembra caricare tutti i inizializzatori prima di eseguire bin/rake db:create.

E, in questa particolare applicazione, ci sono alcuni inizializzatori personalizzati che dipendono da un modello di ActiveRecord (che, a sua volta, dipende dal database che si sta creando, disponibile e con la tabella corrispondente).

Pertanto, il rake non ottiene mai l'esecuzione effettiva dell'attività, non riesce durante l'esecuzione degli inizializzatori. Avrei dovuto sapere se avevo letto attentamente il log completo del messaggio di errore. Questo è il log completo (vedi sotto, in grassetto, le linee incriminate):

 
/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 "ds-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 /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:568:in `initialize' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `new' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/postgresql_adapter.rb:41:in `postgresql_connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:435:in `new_connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:445:in `checkout_new_connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:416:in `acquire_connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:351:in `block in checkout' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize' 
from /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' 
from /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' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize' 
from /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' 
from /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' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_handling.rb:113:in `retrieve_connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_handling.rb:87:in `connection' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/model_schema.rb:209:in `table_exists?' 
from /home/rs/pr/ds/app/models/property.rb:32:in `get' 
from /home/rs/pr/ds/config/initializers/custom/setup_mail.rb:3:in `' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:241:in `load' 
from /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' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:241:in `load' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/engine.rb:648:in `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:in `instrument' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/engine.rb:647:in `load_config_initializer' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/engine.rb:612:in `block (2 levels) in ' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/engine.rb:611:in `each' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/engine.rb:611:in `block in ' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:30:in `instance_exec' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:30:in `run' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:55:in `block in run_initializers' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each' 
from /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' 
from /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' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:417:in `block in each_strongly_connected_component_from' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:44:in `each' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:44:in `tsort_each_child' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:411:in `call' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:411:in `each_strongly_connected_component_from' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `call' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each' 
from /home/rs/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/initializable.rb:54:in `run_initializers' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/railties-4.1.5/lib/rails/application.rb:300:in `initialize!' 
from /home/rs/pr/ds/config/environment.rb:5:in `' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:247:in `require' 
from /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' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:247:in `require' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb:92:in `preload' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb:140:in `serve' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb:128:in `block in run' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb:122:in `loop' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application.rb:122:in `run' 
from /home/rs/.rvm/gems/ruby-2.1.2/gems/spring-1.1.3/lib/spring/application/boot.rb:18:in `' 
from /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:in `' 

lavorerò sul refactoring del codice, al fine di sbarazzarsi di tutte le dipendenze modello nella inizializzatori (che sono abbastanza certo dev'essere una pessima pratica).

+1

+ 1 per sottolineare l'importanza di leggere più attentamente le tracce dello stack degli errori. Roba come questa è l'intero punto di averli. – i2097i

78

Rails 4.1 ships with spring preloader e

Nuove Rails 4.1 applicazioni sarà disponibile con binstubs "springified". Ciò significa che bin/rails e bin/rake sfrutteranno automaticamente gli ambienti primaverili precaricati.

il che significa che il "springified" bin/rake tenterà di precaricare l'applicazione, che a sua volta tenta di eseguire l'initilizers conseguente il problema che stai vedendo.

Per risolvere/aggirare questo si desidera eseguire le attività di rake di installazione iniziali senza molla.Un modo per raggiungere questo obiettivo è quello di eseguirlo con bundler invece:

bundle exec rake db:create 
+2

Hai sottolineato il problema correttamente. Se uno qualsiasi degli inizializzatori dipende da un database esistente, allora l'intera attività di rake 'db: create' non riesce. ma quello che hai suggerito non è necessariamente la soluzione generica. Potrebbe funzionare nel tuo caso che usa 'spring' ma non impedisce altri inizializzatori – Bakhshi

+1

Funziona anche con' Rails 4.2'. Grazie! – 0bserver07

+1

Se si verifica il problema su Rails 4.2 +, questa è la risposta corretta. Probabilmente non c'è bisogno di andare in giro a postgres proprio. –

12

si potrebbe provare a eseguire questo Comando

bin/rake db:create RAILS_ENV=development 

O questo Comando

bin/rake db:migrate RAILS_ENV=development 
+0

Questo è quello che * finalmente * ha funzionato per me. ! –

2

avuto lo stesso problema di oggi (in OS X).

risolto con:

psql -U postgres 
CREATE ROLE rolename WITH CREATEDB LOGIN; 

Usa \du per verificare se è stato creato.

Utilizzare \password rolename per creare una password per quell'utente .

Poi è possibile impostare DB con bundle exec rake db:migrate

2

Nessuna delle soluzioni lavorato per me, ma questo ha funzionato per me.

$ brew services list 
$ brew services restart postgresql 
Problemi correlati