【问题标题】:Switching Branches causes database does not exist error when testing测试时切换分支导致数据库不存在错误
【发布时间】:2019-01-28 14:22:13
【问题描述】:

我最近在一个新工作区中设置了 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:test:prepare,但在运行rspec之前运行,是否有效?
  • 它给了我一个错误Caused by: PG::InvalidParameterValue: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) HINT: Use the same encoding as in the template database, or use template0 as template.

标签: ruby-on-rails database postgresql cloud9


【解决方案1】:

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

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

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

【讨论】:

  • 我做了rake db:drop 但是当我做rake db:create 时我得到了这个错误``` 原因:PG::InvalidParameterValue: ERROR: new encoding (UTF8) is incompatible with the encoding of the模板数据库 (SQL_ASCII) 提示:使用与模板数据库中相同的编码,或使用 template0 作为模板。 ```
  • 啊,您可能必须将 Postgres 配置为默认使用 unicode。看起来它现在设置为 ASCII。
  • 好的,NM Pennypacker,我找到了你的工作方式!我首先删除了所有分支(我已经远程完成了所有更改)。然后我将 template:template: template0 添加到我的 database.yml 并按照您的指示进行操作。 RSpec 现在在我的分支上运行良好。谢谢!
【解决方案2】:

我遇到了类似的问题。 试试把database.yml这行改一下

主机:127.0.0.1

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

【讨论】:

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

    "PG::InvalidParameterValue: ERROR: new encoding (UTF8) is in compatible with the encoding of the template database (SQL_ASCII) 提示:使用与模板数据库中相同的编码,或者使用 template0 作为模板。"

    每当我尝试使用rake db:create

    1. 之后,我按照 NM Pennypacker 的指导做了rake db:drop、rake db:create、rake db:migrate 和rake db:test:prepare。 我做了一些分支,拉入远程更改并运行 rspec 没有问题。谢谢大家的建议!

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2017-02-18
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多