繁体   English   中英

导轨 | 连接到套接字“/tmp/.s.PGSQL.5432”上的服务器失败:没有这样的文件或目录

[英]Rails | connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory

我在本地机器上使用 docker 托管了一个 Postgres 12 实例。 可以使用用户名postgres和密码postgres访问它,并且数据库是test 我测试了实例正在运行,并且可以使用提供的凭据与不同的客户端(例如 TablePlus)建立连接。

但是一个全新的 Ruby on Rails 项目向我抛出了以下错误: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory Is the server running locally and accepting connections on that socket?

我的database.yaml文件如下所示:

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

development:
  <<: *default
  username: postgres
  password: postgres
  database: test

test:
  <<: *default
  username: postgres
  password: postgres
  database: test

production:
  <<: *default
  database: <%= ENV["DB_DATABASE"] %>
  username: <%= ENV["DB_USERNAME"] %>
  password: <%= ENV["DB_PASSWORD"] %>

关于发生了什么的任何想法?

(顺便说一句,我在 M1 Mac 上)

您需要提供主机和端口号以连接到在 docker 上运行的数据库。

添加这两行...

default: &default
  ...
  host: <%= ENV.fetch('DATABASE_HOST', 'localhost') %>
  port: <%= ENV.fetch('DATABASE_PORT', 5432) %>

如果您查看由 rails 生成的新 database.yml 文件,您会发现这些行...

  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  #host: localhost

  # The TCP port the server listens on. Defaults to 5432.
  # If your server runs on a different port number, change accordingly.
  #port: 5432

当进程在同一主机操作系统上运行时,域套接字工作。 由于数据库进程在技术上是另一台主机的 docker 上,服务器需要数据库的 TCP Socket 地址进行通信。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM