Fullstaq Ruby Server Edition 数据库连接报错:常见问题处理
以下是数据库连接问题的系统排查流程,按优先级排序:
1. 基础环境验证
# 检查数据库服务状态
sudo systemctl status postgresql # PostgreSQL示例
sudo systemctl status mysql # MySQL示例
# 测试端口连通性
nc -zv 127.0.0.1 5432 # PostgreSQL默认端口
tel*** 127.0.0.1 3306 # MySQL默认端口
2. 配置验证
-
检查数据库配置文件
# config/database.yml 示例 production: adapter: postgresql host: <%= ENV['DB_HOST'] %> port: <%= ENV['DB_PORT'] || 5432 %> database: <%= ENV['DB_NAME'] %> username: <%= ENV['DB_USER'] %> password: <%= ENV['DB_PASS'] %> -
环境变量验证
# 检查实际加载的环境变量 bundle exec rails runner 'puts ENV["DB_HOST"]'
3. 依赖库问题
Fullstaq Ruby 需要特定数据库客户端库:
# PostgreSQL 依赖检查
ldd /usr/lib/fullstaq-ruby/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg-1.4.3/lib/pg_ext.so | grep libpq
# 解决方案:安装缺失库
sudo apt-get install libpq-dev # Debian/Ubuntu
4. 连接池配置
在 config/puma.rb 中检查连接池设置:
before_fork do
ActiveRecord::Base.connection_pool.disconnect!
end
on_worker_boot do
ActiveRecord::Base.establish_connection
end
5. 认证错误处理
常见错误类型:
PG::ConnectionBad (FATAL: password authentication failed)Mysql2::Error::ConnectionError (A***ess denied)
解决方案:
-- PostgreSQL 权限修复示例
ALTER USER app_user WITH PASSWORD 'new_password';
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
6. 网络策略检查
# 查看防火墙规则
sudo ufw status
sudo iptables -L -n
# 检查数据库监听配置
# PostgreSQL: postgresql.conf -> listen_addresses = '*'
# MySQL: mysqld.***f -> bind-address = 0.0.0.0
7. TLS/SSL 问题
当使用加密连接时:
# 在 database.yml 中显式声明
sslmode: require
sslrootcert: /path/to/ca.crt
8. 连接泄露检测
使用监控工具定位连接泄露:
# PostgreSQL 活动连接查看
psql -c "SELECT * FROM pg_stat_activity"
# MySQL 连接状态
mysqladmin -u root -p processlist
9. Fullstaq 特定问题
# 检查环境隔离配置
fullstaq-ruby env list
# 验证环境变量加载顺序
cat /etc/fullstaq-ruby/env_vars/*
调试脚本
创建 test_connection.rb:
require 'pg'
begin
conn = PG.connect(
host: ENV['DB_HOST'],
port: ENV['DB_PORT'],
dbname: ENV['DB_NAME'],
user: ENV['DB_USER'],
password: ENV['DB_PASS']
)
puts "Connection su***essful! Server version: #{conn.server_version}"
rescue => e
puts "FAILED: #{e.message}\n#{e.backtrace.join("\n")}"
ensure
conn&.close
end
运行:
fullstaq-ruby exec ruby test_connection.rb
关键提示:Fullstaq Ruby 的环境隔离可能导致环境变量加载异常,优先检查
/etc/fullstaq-ruby/env_vars/下的配置文件。若问题持续,使用strace -f bundle exec rails c跟踪系统调用。