尝试将PostgreSQL与Rails连接时出现连接错误

68de4m5k  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(145)

我试图将我的应用程序在Rails中与Postgresql连接,但我遇到了一个关于用户名的错误,但是,我已经检查了几次,一切似乎都没问题。我使用的是rails 7这是docker-compose文件:

version: "3.8"
services:
  database:
    image: "postgres:14-alpine"
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=aventuraweb
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=aventuraweb_development
    volumes:
      - postgres_data_development:/var/lib/postgresql/data

  redis:
    image: "redis:7"
    ports:
      - 6379:6379

volumes:
  postgres_data_development: {}

字符串
这就是database.yml:

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

development:
  <<: *default
  database: aventuraweb_development
  username: aventuraweb
  password: secret
  host: localhost


我运行foreman,一切似乎都没问题,但当我试图到达页面时,我发现错误:

aventuraweb-database-1  | 2023-07-16 17:40:16.711 UTC [29] FATAL:  password authentication failed for user "aventuraweb"
19:40:16 db.1    | aventuraweb-database-1  | 2023-07-16 17:40:16.711 UTC [29] DETAIL:  Role "aventuraweb" does not exist.
19:40:16 db.1    | aventuraweb-database-1  |    Connection matched pg_hba.conf line 100: "host all all all scram-sha-256"

18:21:12 web.1   | ActiveRecord::DatabaseConnectionError (There is an issue connecting to your database with your username/password, username: aventuraweb.
18:21:12 web.1   | 
18:21:12 web.1   | Please check your database configuration to ensure the username/password are valid.


我试着修剪系统和网络几次,但我不知道下一步该怎么做任何线索发生了什么?谢谢你,谢谢

hfyxw5xn

hfyxw5xn1#

这看起来像是你试图从运行在主机上的Rails应用程序连接到运行在Docker内部的PostgreSQL数据库(即在Docker外部)。在这种情况下,数据库的主机不应该是localhost,而应该是在docker-compose.yml文件中指定的服务名称。
您应该将database.yml文件更新为以下内容:

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

development:
  <<: *default
  database: aventuraweb_development
  username: aventuraweb
  password: secret
  host: database

字符串
另外,请确保您的Rails应用程序和PostgreSQL都是同一Docker网络的一部分。如果你的Rails应用没有在Docker中运行,你可能需要使用host.docker.internal作为主机,而不是数据库(尽管这可能会因操作系统而异)。
另外,请确保使用以下命令创建一个新的docker介质,以防止由于旧文件而导致损坏:

docker volume rm projectname_postgres_data_development

相关问题