2014-09-01 21 views
41

Tôi đang sử dụng đường ray 4.1.5 với postgresql 9.1 trong Debian 7 và tôi không thể tạo cơ sở dữ liệu trong môi trường phát triển của mình. Khi tôi chạyrake db: tạo lỗi "cơ sở dữ liệu không tồn tại" với postgresql

bin/rake db:create 

tôi nhận được

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

tôi đang cố gắng để tạo ra cơ sở dữ liệu như vậy, một cách tự nhiên, nó không tồn tại. Tuy nhiên đường ray sẽ tạo ra nó ... Dưới đây là cấu hình của tôi/database.yml:

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

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

Và đây là một phần của bản ghi 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 

Bạn có bất cứ gợi ý? Tôi đã ở đây hơn một giờ, và vẫn không thể hiểu tại sao điều này lại xảy ra ...

Cảm ơn!

+0

còn 'username' và' passowrd' thì sao? – IS04

+0

Tôi nghĩ rằng không phải là nó: Tôi đang sử dụng phương pháp xác thực "ngang hàng" postgresql; anyway, chỉ trong trường hợp, tôi cũng đã thêm 'username' và' password' vào database.yml, và vẫn gặp lỗi tương tự. Tôi cũng nghĩ rằng, nếu đó là một vấn đề xác thực, postgres sẽ phàn nàn về người dùng không tồn tại trước khi phàn nàn về db. –

Trả lời

1

Tôi thấy hai vấn đề, vì is04 chỉ ra rằng bạn có thể cần ít nhất một giá trị username trong database.yml của bạn.

Bạn cũng cần để tạo ra các postgres vai trò:

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

Tôi đã thử, nhưng tôi nghĩ rằng không phải là nó: vai trò đã được tạo ra (như một superadmin, thực sự), và tôi đang sử dụng phương pháp xác thực "peer" postgrsql. Tôi đã thử chỉ thêm một 'username', và cả' username' và 'password' vào database.yml trong mọi trường hợp, và tôi vẫn gặp lỗi tương tự. –

+0

Theo như tôi biết việc di chuyển sẽ tự động tạo ra db cho SQLite và cho Postgres bạn phải tự mình tạo ra nó trong môi trường phát triển và các môi trường khác. – PatNowak

+0

Điều đó không chính xác. Đường ray mặc định cho người dùng hệ điều hành đã khởi tạo cơ sở dữ liệu làm mẫu 'database.yml' mặc định giải thích: https://github.com/rails/rails/blob/d7f9adf7941574d0a40a165739938d28f278bd77/railties/lib/rails/generators/rails/app/ templates/config/databases/postgresql.yml.tt # L28-L32. Vì vậy, 'whoami' được sử dụng làm mặc định tôi tin. 'psql postgres -U \' whoami \ '' sẽ hoạt động nếu cơ sở dữ liệu được khởi tạo với đúng người dùng. –

6

tôi thấy vấn đề này ...

Nó đã làm với Rails initializers: Rails dường như để tải tất cả các initializers trước khi thực hiện bin/rake db:create. Và, trong ứng dụng cụ thể này, có một vài bộ khởi tạo tùy chỉnh phụ thuộc vào mô hình ActiveRecord (trong đó, lần lượt, phụ thuộc vào cơ sở dữ liệu đang được tạo, sẵn có và với bảng tương ứng).

Do đó, rake không bao giờ thực sự thực thi tác vụ, nó không thành công khi thực hiện các khởi tạo. Tôi nên biết nếu tôi đã đọc kỹ toàn bộ thông báo lỗi. Đây là toàn bộ log (xem dưới đây, in đậm, các đường vi phạm):

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

tôi sẽ làm việc trên refactoring mã, để thoát khỏi của bất kỳ phụ thuộc mô hình trong initializers (mà tôi khá chắc chắn nó phải là một thực hành rất xấu).

+1

+ 1 để nhấn mạnh tầm quan trọng của việc đọc dấu vết ngăn xếp lỗi chặt chẽ hơn. Những thứ như thế này là toàn bộ điểm có chúng. – i2097i

78

Rails 4.1 ships with spring preloader, và

Rails mới 4.1 ứng dụng sẽ xuất xưởng với binstubs "springified". Điều này có nghĩa là bin/rails và bin/rake sẽ tự động tận dụng môi trường lò xo tải sẵn.

có nghĩa là "springified" bin/rake sẽ cố gắng tải trước ứng dụng, do đó sẽ cố gắng chạy initilizers dẫn đến vấn đề bạn đang nhìn thấy.

Để khắc phục/giải quyết vấn đề này, bạn muốn chạy các tác vụ cào thiết lập ban đầu không có mùa xuân.Một cách để đạt được điều đó là để chạy nó với bundler thay vì:

bundle exec rake db:create 
+2

Bạn đã chỉ ra vấn đề chính xác. Nếu bất kỳ bộ khởi tạo nào phụ thuộc vào cơ sở dữ liệu hiện có thì toàn bộ tác vụ rake 'db: create' không thành công. nhưng những gì bạn đề xuất không nhất thiết là giải pháp chung. Nó có thể hoạt động trong trường hợp của bạn đang sử dụng 'spring' nhưng không ngăn các initializers khác – Bakhshi

+1

Làm việc với' Rails 4.2'. Cảm ơn! – 0bserver07

+1

Nếu bạn gặp sự cố trên Rails 4.2 +, đây là câu trả lời đúng. Có khả năng không cần phải lộn xộn xung quanh trong postgres thích hợp. –

12

Bạn có thể thử chạy Command-

bin/rake db:create RAILS_ENV=development 

này Hoặc này Command-

bin/rake db:migrate RAILS_ENV=development 
+0

Đây là những gì * cuối cùng * đã làm việc cho tôi. ! –

2

Đã cùng một vấn đề ngày nay (trong OS X).

giải quyết với:

psql -U postgres 
CREATE ROLE rolename WITH CREATEDB LOGIN; 

Sử dụng \du để kiểm tra xem nó được tạo ra.

Sử dụng \password rolename để tạo mật khẩu cho người dùng/vai trò đó.

Sau đó, bạn có thể thiết lập DB với bundle exec rake db:migrate

2

Không ai trong số các giải pháp làm việc cho tôi, nhưng điều này đã làm việc cho tôi.

$ brew services list 
$ brew services restart postgresql 
Các vấn đề liên quan