You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

执行rails db:create后出现PostgreSQL认证错误求助

解决Rails db:create时的PostgreSQL pg_hba.conf连接错误

我来帮你搞定这个PostgreSQL的连接问题!这个错误本质是PostgreSQL的访问控制配置文件pg_hba.conf里,没有允许你的客户端IP(172.18.0.1)以postgres用户连接postgres数据库的规则,而且你当前的连接是关闭SSL的状态。下面是一步步的解决方法:

步骤1:找到正确的pg_hba.conf文件位置

很多人会踩坑——修改了错误路径下的pg_hba.conf,导致配置完全没生效。你可以用以下命令确认文件的真实位置:

psql -U postgres -c 'SHOW hba_file;'

如果你的PostgreSQL是运行在Docker容器里的,先进入容器再执行上面的命令:

docker exec -it <你的PostgreSQL容器名> bash
# 进入容器后再执行psql命令

步骤2:添加正确的访问规则

打开找到的pg_hba.conf文件,在合适的位置(比如所有host规则的上方)添加一行匹配你场景的规则:

# 允许172.18.0.1这个IP以postgres用户连接postgres数据库,使用密码认证(md5)
host    postgres     postgres     172.18.0.1/32     md5

如果你想简化测试(不建议生产环境用),可以用trust认证(免密码直接连接):

host    postgres     postgres     172.18.0.1/32     trust

注意:如果你的Rails配置里要连接的是mydatabase而不是postgres数据库,也可以把规则里的第一个postgres改成mydatabase,或者用all匹配所有数据库:

host    all     postgres     172.18.0.1/32     md5

步骤3:让PostgreSQL加载新配置

修改完pg_hba.conf后,必须让PostgreSQL重新读取配置才能生效:

  • 本地安装的PostgreSQL:执行
    pg_ctl reload
    
    或者用系统服务命令(比如Ubuntu/Debian):
    sudo systemctl reload postgresql
    
  • Docker容器里的PostgreSQL:直接重启容器即可
    docker restart <你的PostgreSQL容器名>
    

步骤4:验证Rails数据库配置

最后检查你的database.yml配置,确保和PostgreSQL的设置匹配:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  username: postgres
  host: localhost
  port: 5433
  password: <你的postgres用户密码> # 如果用md5认证的话必须加这个

development:
  <<: *default
  database: mydatabase

做完这些步骤后,再重新运行rails db:create应该就能正常创建数据库了。

内容的提问来源于stack exchange,提问作者asndonsadoasndo231213

火山引擎 最新活动