2014-09-01 76 views
41

我在Debian 7下使用rails 4.1.5和postgresql 9.1,並且我無法在我的開發環境中創建數據庫。當我運行rake db:創建拋出「數據庫不存在」與postgresql錯誤

bin/rake db:create 

我得到

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

我想創建數據庫,這樣,自然,它不存在。然而軌應該創造它... ...這是我的config/database.yml中:

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

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

而這裏的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 

你有任何指針?我已經在這一個多小時了,仍然不明白爲什麼會發生這種情況...

謝謝!

+0

'username'和'passowrd'呢? – IS04 2014-09-01 18:36:28

+0

我認爲不是這樣的:我使用postgresql「peer」身份驗證方法;無論如何,爲了以防萬一,我還將'username'和'password'添加到database.yml中,並且仍然有相同的錯誤。我也認爲,如果這是一個身份驗證問題,postgres會在抱怨數據庫之前抱怨用戶不存在。 – 2014-09-01 21:14:54

回答

1

我看到兩個問題,因爲IS04指出,你可能需要至少在你的database.yml一個username值。

您還需要創建Postgres的作用:

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

我試過了,但我認爲不是這樣:角色已經創建(實際上是superadmin),我正在使用postgrsql「peer」身份驗證方法。我試過在任何情況下只添加一個'username',並將'username'和'password'添加到database.yml中,我仍然得到相同的錯誤。 – 2014-09-01 21:17:45

+0

據我所知,遷移將自動爲SQLite和Postgres創建數據庫,您必須在開發和其他環境中自行創建數據庫。 – PatNowak 2015-02-11 16:09:51

+0

這是不正確的。 Rails默認爲初始化數據庫的操作系統用戶,因爲默認的'database.yml'模板解釋:https://github.com/rails/rails/blob/d7f9adf7941574d0a40a165739938d28f278bd77/railties/lib/rails/generators/rails/app/模板/配置/數據庫/ postgresql.yml.tt#L28-L32。所以'whoami'被用作我相信的默認值。 'psql postgres -U \'whoami \'''''''''''如果數據庫是用正確的用戶初始化的,那麼它應該可以工作。 – 2018-02-08 14:59:31

6

我發現這個問題...

它與Rails的初始化做:Rails的似乎執行bin/rake db:create前裝入所有的初始化。

而且,在這個特殊的應用程序,有依賴於ActiveRecord模型(這又取決於數據庫創建,可用且與相應的表)一些自定義初始化。

因此耙從來沒有得到真正執行任務,它執行初始化時失敗。如果我仔細閱讀完整的錯誤消息日誌,我應該知道。這是一個完整的日誌(見下文,粗體,違規行):

 
/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 `' 

我將努力在重構代碼,以擺脫在初始化任何模型依賴關係(我敢的肯定它是一個非常糟糕的做法)。

+1

+ 1,強調更仔細地閱讀錯誤堆棧跟蹤的重要性。像這樣的東西是擁有它們的全部要點。 – i2097i 2015-06-24 13:30:20

78

的Rails 4.1 ships with spring preloader,並

新的Rails 4.1的應用程序將與 「springified」 binstubs發貨。這意味着斌/導軌和斌/耙將自動預緊的彈簧環境的優勢。

這意味着「彈性化」的bin/rake會嘗試預加載應用程序,反過來會嘗試運行初始化程序導致您遇到的問題。

要修復/工作解決此要無彈簧運行初始設置耙任務。實現的方法之一就是用打捆運行它來代替:

bundle exec rake db:create 
+2

您指出了正確的問題。如果任何初始化器依賴於現有的數據庫,那麼整個rake任務'db:create'失敗。但是你提出的建議不一定是通用的解決方案。它可能適用於你正在使用'spring'的情況,但並不妨礙其他初始化程序 – Bakhshi 2016-07-08 05:42:22

+1

也適用於'Rails 4.2'。謝謝! – 0bserver07 2016-08-17 18:06:40

+1

如果您在Rails 4.2 +上遇到問題,這是正確的答案。有可能不需要在postgres中搞亂。 – 2016-11-07 16:00:29

12

你可以嘗試運行此命令 -

bin/rake db:create RAILS_ENV=development 

還是這個命令 -

bin/rake db:migrate RAILS_ENV=development 
+0

這是*最後*爲我工作。 ! – 2015-09-22 22:30:23

2

今天有同樣的問題(在OS X中)。

與解決:

psql -U postgres 
CREATE ROLE rolename WITH CREATEDB LOGIN; 

使用\du檢查,如果它的創建。

使用\password rolename爲該用戶/角色創建密碼

那麼你就可以bundle exec rake db:migrate

2

無解的設置DB爲我工作,但這個工作對我來說。

$ brew services list 
$ brew services restart postgresql