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

时间:2019-01-28 14:22:14

标签: ruby-on-rails database postgresql cloud9

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

Failure/Error: ActiveRecord::Migration.maintain_test_schema!

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

仅当我更改为分支并运行rspec时才会发生。到目前为止,作为解决方案,每次我在分支之间切换时,我一直在创建数据库并运行迁移。

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

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

最近,我不得不同时在几个分支上工作,所以这变得很麻烦。我很想仅仅创建一个新的工作区。

这是我的database.yml(当然,其中隐藏了一些东西,应用程序代表了我的应用程序名称)。

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'] %>

提前谢谢

3 个答案:

答案 0 :(得分:1)

您应该能够通过运行以下命令来重置数据库:

rake db:drop db:create db:migrate db:test:prepare

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

答案 1 :(得分:0)

我面临类似的问题。 只需尝试更改这一行的database.yml

主机:127.0.0.1

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

答案 2 :(得分:0)

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

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

每当我尝试使用rake db:create

  1. 此后,我遵循了NM Pennypacker的指导,做了rake db:droprake db:createrake db:migraterake db:test:prepare。 我已经做了一些分支,进行了远程更改并毫无问题地运行rspec。谢谢大家的建议!