[英]PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
[英]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.