我在Debian 7下使用rails 4.1.5和postgresql 9.1,我无法在我的开发环境中创建数据库 . 我跑的时候
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 ...
我正在尝试创建数据库,因此,它自然不存在 . 但是rails应该创建它...这是我的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
你有什么指针吗?我已经在这一个多小时了,仍然不明白为什么会发生这种情况......
谢谢!
6 回答
Rails 4.1 ships with spring preloader,和
这意味着"springified"
bin/rake
将尝试预加载应用程序,而app又会尝试运行启动程序,从而导致您遇到的问题 .要修复/解决此问题,您需要在没有 spring 的情况下运行初始设置rake任务 . 实现这一目标的一种方法是使用bundler运行它:
我发现了这个问题......
它与Rails初始化器有关:Rails似乎在执行
bin/rake db:create
之前加载所有初始化器 .并且,在这个特定的应用程序中,有一些自定义初始化程序依赖于ActiveRecord模型(反过来,它依赖于正在创建的数据库,可用的数据库和相应的表) .
因此rake永远不会实际执行任务,它在执行初始化程序时失败 . 我应该知道我是否仔细阅读了完整的错误消息日志 . 这是完整的日志(见下文,粗体,有问题的行):
我将努力重构代码,以摆脱初始化程序中的任何模型依赖(我非常确定它一定是一个非常糟糕的做法) .
您可以尝试运行此命令 -
或者这个命令 -
今天有同样的问题(在OS X中) .
Solved with:
使用
\du
检查是否已创建 .使用
\password rolename
为该用户/角色创建密码 .然后你可以用
bundle exec rake db:migrate
设置数据库没有一个解决方案适合我,但这对我有用 .
我看到两个问题,因为is04指出你可能在database.yml中至少需要一个
username
值 .您还需要创建postgres角色: