ruby-on-rails -/sign_in 处的 PG::ConnectionBad 无法连接到服务器:连接但我可以使用 psql 连接

标签 ruby-on-rails windows postgresql ubuntu windows-subsystem-for-linux

我在一个窗口中有 Ubuntu(我从 Microsoft Store 安装的)。在这个 Ubuntu 中,我在这个 Ubuntu 中有一个 Ruby Web 应用程序,它连接到我的窗口(不是 Ubuntu)中的 Postgres。这是我的database.yml (/应用程序/应用程序名称/配置/)

development:
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  port: 5432
  database: xxx
  username: postgres
  password: 
所有这些我都有相应的设置。当我运行 rails server ,Web 应用程序启动并监听 localhost:3000。当我在 localhost:3000 打开浏览器时,出现以下错误:
> PG::ConnectionBad at /sign_in could not connect to server: Connection
> refused   Is the server running on host "localhost" (127.0.0.1) and
> accepting     TCP/IP connections on port 5432?
我通过运行 psql 进行了故障排除我可以在端口 5432 连接到数据库。
Server [localhost]:
Database [postgres]: xxx
Port [5432]:
Username [postgres]:
Password for user postgres:
psql (10.15)
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.
如何进一步解决此问题?我意识到我没有运行 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux在我安装 Ubuntu 之前,在 Windows 中的 Windows PowerShell 中。我错过了这一步导致的问题吗?

最佳答案

首先,我假设这是一个 WSL2 实例,而不是 WSL1。
WSL2 实例确实在 VM 中运行。 “VirtualMachinePlatform”组件是 Hyper-V 的子集。 WSL2 实例在它们自己的虚拟 NIC vEthernet (WSL) 后面运行 NAT(未桥接) .localhost WSL2 实例指向虚拟接口(interface),而不是 Windows 主机。另一方面,Windows 确实会尝试检测绑定(bind)在 WSL2 实例中的端口,并允许 Windows 应用程序(例如 Web 浏览器)通过 localhost 访问这些端口上的服务。 .但是,对于某些人来说,这似乎经常发生故障,需要 wsl --shutdown VM 以恢复功能。
所以是的,您可以使用 Web 浏览器(在 Windows 中运行)访问 Rails 应用程序(在 WSL 中运行),地址为 localhost。 .但是,您无法通过 localhost 从运行在 WSL2 中的 Rails 服务器访问在 Windows 中运行的 Postgres 服务器。 .
或者至少你不应该。我很惊讶 psql命令似乎正在工作。是那个吗:

  • psql在 WSL 下运行? (不应该通过 localhost 工作)
  • 或者你的意思是你正在运行 psql从 PowerShell 或 cmd?这当然可以通过 localhost 工作。
  • 或者也许是 psql命令是否在传播到 WSL 的 Windows 路径中?这也将允许它通过 localhost 工作。 .

  • 但最终,从 WSL 中访问 Windows Postgres 服务器所需的只是使用指向它的 Windows IP 或地址。我已经详细说明了一些选项 in this answer几天之前。但简短的回答:
  • 使用 mDNS,即“.local”域。如果您的主机名是 stevesdesktop ,然后尝试替换 localhost在您的 database.ymlstevesdesktop.local .
  • 如果这不起作用,请直接使用 Windows IP。
  • 或编辑 /etc/hosts带有 IP 和要分配的名称。
  • 关于ruby-on-rails -/sign_in 处的 PG::ConnectionBad 无法连接到服务器:连接但我可以使用 psql 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65641530/

    相关文章:

    css - 应用程序不读取样式表

    ruby-on-rails - 是否可以在 Rails 中使用 Compass 为开发和生产设置不同的 SASS 输出样式?

    windows - 如何使用 Delphi 2010 以编程方式确定 Windows 的性能设置

    java - spring roo windows安装 "Could not find or load main class"

    sql - 为什么这段代码给我错误(postgresql JSONB)?

    sql - 如何使用 PostgreSQL 中的排名函数将在线订单与之前的几个网站访问相关联

    postgresql - Postgres级联删除不起作用

    ruby-on-rails - Sidekiq 的流程很忙,而且它们永远不会消失

    ruby-on-rails - 在 Rails 3 中,跟踪给定 RESTful 资源的访问次数的最有效方法是什么?

    windows - Windows Store和所有应用程序在打开后立即崩溃