PostgreSQL 连接被拒绝(PGError)(PostgreSQL和Rails)
在本文中,我们将介绍当使用PostgreSQL作为后端数据库时,可能会遇到的连接被拒绝的问题,并提供一些解决方案和示例代码来解决这个问题。
阅读更多:PostgreSQL 教程
问题描述
在使用PostgreSQL和Rails进行开发时,有时候会出现连接被拒绝的错误信息,如下所示:
PGError: could not connect to server: Connection refused
Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?
这个错误信息表明无法连接到PostgreSQL服务器,通常是由于服务器未启动或未配置正确的连接信息所致。
解决方案
下面是一些常见的解决方案,可以帮助您解决连接被拒绝的问题。
1. 检查PostgreSQL服务器是否运行
首先,您需要确认PostgreSQL服务器是否已经启动。您可以在终端或命令提示符中运行以下命令来检查:
$ sudo service postgresql status
如果PostgreSQL正在运行,您将看到类似以下信息:
9.6/main (port 5432): online
如果PostgreSQL没有在运行,您可以使用以下命令启动它:
$ sudo service postgresql start
2. 检查连接信息是否正确
确保您的Rails配置文件(database.yml)中的连接信息正确无误。检查以下几点:
host参数是否设置为正确的主机地址(例如:localhost)。port参数是否设置为正确的端口号(默认为5432)。username和password参数是否设置为正确的数据库用户名和密码。
例如,以下是一个示例的database.yml文件:
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: myuser
password: mypassword
host: localhost
port: 5432
3. 配置PostgreSQL监听所有IP地址
有时候,PostgreSQL默认只监听本地连接。如果您需要远程连接到PostgreSQL服务器,您需要配置PostgreSQL来监听所有IP地址。您可以编辑PostgreSQL的配置文件(pg_hba.conf)并将以下行的注释去掉:
# IPv4 local connections:
#host all all 127.0.0.1/32 trust
修改为:
# IPv4 local connections:
host all all 0.0.0.0/0 trust
4. 检查防火墙设置
如果您的服务器上启用了防火墙,确保允许来自外部IP地址的连接到5432端口。您可以使用以下命令来配置防火墙,例如使用ufw:
$ sudo ufw allow 5432
5. 检查Gemfile和Bundle
确保您的Gemfile中已经正确指定了pg gem,并运行bundle install来安装或更新它。
gem 'pg'
示例代码
以下是一个使用PostgreSQL和Rails的简单示例代码,可以帮助您更好地理解如何设置连接信息和解决连接被拒绝的问题。
# config/database.yml
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: myuser
password: mypassword
host: localhost
port: 5432
# config/initializers/postgresql.rb
require 'pg'
conn = PG.connect(dbname: 'myapp_development', host: 'localhost', port: 5432, user: 'myuser', password: 'mypassword')
res = conn.exec('SELECT version()')
puts res[0]['version']
conn.close
总结
在本文中,我们介绍了当使用PostgreSQL和Rails时,出现连接被拒绝的错误信息的常见原因和解决方案。通过检查服务器是否运行、检查连接信息是否正确、配置PostgreSQL监听所有IP地址、检查防火墙设置以及Gemfile和Bundle的配置,您应该能够成功连接到PostgreSQL服务器。
极客笔记