为了解决我遇到的NoMethodError,我在某处读到运行rake db:reset
可能有助于解决问题。我是Rails的新手并且错误地做了这个,却不知道这会做什么。当我运行它时,它成功地删除了我的开发数据库(PosgreSQL),但随后它发出致命错误,并显示以下消息:
Dropped database 'development'
FATAL: Peer authentication failed for user "postgres"
Couldn't drop database 'test'
rake aborted!
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"
Tasks: TOP => db:drop:_unsafe
我尝试手动删除测试数据库并重新运行rake db:reset
,但是发生了同样的错误。所以我丢失了我在开发数据库中的数据,除了空的生产数据库之外什么都没有。
我意识到这可以通过编辑pg_hba.conf
文件来修复,但我的应用程序正在我学校的高性能群集(Linux VM)上运行而且我没有写访问权限该文件。我不明白为什么它能够删除我的开发数据库,而不是其余的。
我仍然拥有seeds.rb
和schema.rb
个文件,那么是否可以重建我的数据库而不会进一步搞乱?或者我有办法解决直接影响重置命令的问题吗?
答案 0 :(得分:2)
rake db:reset
运行db:drop
和db:setup
。 db:drop
删除当前RAILS_ENV的数据库。如果未设置RAILS_ENV,它将尝试删除开发和测试数据库。
尝试在运行之前设置RAILS_ENV:
RAILS_ENV=development rake db:reset
答案 1 :(得分:0)
我发现了有关身份验证失败的问题。当我在一周前首次设置数据库时,我已将host:localhost
添加到我的database.yml
文件中,以避免同样的问题。但是,我只将它添加到我的开发数据库中,因为到目前为止我只需要访问它。将host:localhost
添加到文件中的其他两个数据库已解决了我的问题。