测试时切换分支导致数据库不存在错误

Switching Branches causes database does not exist error when testing

我最近在一个新工作区中设置了 postgresql。我按照通常的方式设置它。或者至少我认为我做到了。但是后来我得到了这个错误

Failure/Error: ActiveRecord::Migration.maintain_test_schema!

ActiveRecord::NoDatabaseError:
  FATAL:  database "app_test" does not exist

它只发生在我换到一个分支并且运行 rspec。到目前为止,我一直在创建数据库并 运行 每次在分支之间切换时进行迁移作为解决方案。

它不会影响开发数据库。只要我留在那个分支上,我就不必再次添加测试数据库。但是如果我因为任何原因不得不离开它,我将不得不重新添加数据库。

它似乎会影响任何不是主分支的分支。而且这只发生在本地。我正在使用 Cloud 9,我的应用程序是 Rails 应用程序。我应该卸载并重新安装 postgresql,然后重新设置吗?

最近要同时处理好几个分支,比较麻烦。我很想创建一个新的工作区。

这是我的 database.yml(当然有些东西是隐藏的,app 是我应用名称的替代品)。

default: &default
  adapter: postgresql
  encoding: unicode
  host: localhost
  username: postgres
  password: secret
  pool: 5

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

提前致谢

您应该可以通过 运行:

重置您的数据库
rake db:drop db:create db:migrate db:test:prepare

这将删除您的开发数据库(以及其中的任何数据),重新创建它,从您的迁移文件重建架构,并重建测试数据库。如果此时它不起作用,则可能是权限问题

我遇到过类似的问题。 只需尝试更改 database.yml

的这一行

主机:127.0.0.1

当我提供本地主机时,它使用默认设置进行连接。 (我在不同的端口上有很多数据库服务器版本)

  1. 首先,我删除了我的本地分支以开始清理(这可能不是必需的,但由于它们中的大多数更改了模式,我认为它会更干净)。我的更改全部远程存储,所以这没什么大不了的。
  2. 然后我在开发和测试部分将 template: template0 添加到我的 database.yml 中。我听从了这个建议 Fix for PG::Error: ERROR: new encoding (UTF8) is incompatible 因为我有这个错误:

"PG::InvalidParameterValue: ERROR: 新编码 (UTF8) 与模板数据库的编码不兼容 (SQL_ASCII) 提示:使用与模板数据库中相同的编码,或使用 template0 作为模板。"

每当我尝试使用 rake db:create

  1. 之后我按照 NM Pennypacker 的指导做了 rake db:droprake db:createrake db:migraterake db:test:prepare。 我创建了一些分支,引入了远程更改并且 运行 rspec 没有问题。谢谢大家的指教!