首页 > 解决方案 > 使用 Rails API / Rspec / Postgresql 问题的 postgres 问题

问题描述

我在通过 rspec 运行测试时遇到问题

bundle exec rspec spec/requests/authentication_spec.rb

An error occurred while loading ./spec/requests/authentication_spec.rb.
Failure/Error: ActiveRecord::Migration.maintain_test_schema!

ActiveRecord::NoDatabaseError:
  FATAL:  Peer authentication failed for user "test"

我的开发数据库工作正常,我尝试将数据放入数据库并成功。我找到了很多解决方案,但没有任何效果。我的数据库配置:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: test
  adapter: postgresql
  host: localhost
  port: 5432
  user: test
  password: test

test:
  <<: *default
  database: test
  port: 5432
  user: test
  password: test

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

我错过了什么?我是 postgresql 的新手,我想学习 rails,但我坚持使用 postgres(我也需要一些关于 postgres 的基本知识)

我正在使用 ubuntu 20、ruby '2.7.0'、rails 6.1.3.2、rspec-rails 5.0.1、postgres (PostgreSQL) 13.3 (Ubuntu 13.3-1.pgdg20.04+1)

标签: ruby-on-railspostgresqlrspec-rails

解决方案


有两种情况。

  1. 数据库名称应该不同,以便有单独的数据库用于开发和测试。
  2. 需要在测试环境中添加主机密钥。

当我们在任何环境中包含默认值时,我们不需要重复在该环境中再次提到的相同信息。

前任。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost

development:
  <<: *default
  database: app_dev
  port: 5432
  user: test
  password: test

test:
  <<: *default
  database: app_test
  port: 5432
  user: test
  password: test

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

还要确保数据库的用户名和密码匹配。因此,如果您的开发环境运行良好,我们只需要检查host不同的数据库。

但是如果您的开发环境也有同样的问题(我的意思是当您rails s在浏览器中启动并加载页面并且它不工作并显示数据库连接错误)那么您需要验证您的数据库用户和密码。

让我知道如果有什么没有任何意义。


推荐阅读