AWS EC2升级Ubuntu后浏览器无法访问,Rails连接MySQL出错求助
问题1:Rails无法连接本地MySQL(127.0.0.1:3306)
排查步骤
- 验证本地MySQL连通性:执行
mysql -u root -p -h 127.0.0.1,若连不上说明MySQL本地监听异常;若能连则问题出在Rails配置。 - 检查MySQL服务状态:
sudo systemctl status mysql,确认服务处于active (running)状态。 - 查看MySQL监听地址:
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep bind-address,确认配置的监听地址包含127.0.0.1或0.0.0.0(允许所有地址访问)。
解决方法
- MySQL本地监听异常:
- 修改
/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为0.0.0.0(同时允许本地和外部连接),保存后重启服务:sudo systemctl restart mysql。
- 修改
- Rails配置或版本兼容问题:
- 打开
config/database.yml的production节点,确认host: 127.0.0.1、port: 3306、username、password配置正确。 - Ubuntu 20.04默认使用MySQL 8.0,其默认认证插件为
caching_sha2_password,旧版mysql2gem可能不支持。执行以下命令修改root用户认证方式:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码'; FLUSH PRIVILEGES; - 更新
mysql2gem到支持MySQL 8.0的版本:bundle update mysql2,随后重启Rails服务。
- 打开
问题2:浏览器无法访问EC2公网IP
排查步骤
- 安全组规则:确认安全组入站规则已开放Rails服务使用的端口(直接运行Rails默认是3000,用Nginx反向代理则为80/443),来源需包含你的公网IP或
0.0.0.0/0(允许所有访问)。 - Ubuntu防火墙(ufw):执行
sudo ufw status,确认对应端口已被允许。若未开放,执行sudo ufw allow 3000/tcp(替换为你的服务端口),再执行sudo ufw reload。 - Rails监听地址:生产环境启动Rails时必须绑定
0.0.0.0,否则仅允许本地访问。启动命令示例:rails s -e production -b 0.0.0.0;若用Puma/Passenger,需在配置文件中设置bind '0.0.0.0'。 - 端口监听验证:执行
netstat -tulpn | grep LISTEN,确认服务端口处于监听状态,且监听地址为0.0.0.0或EC2实例的私网/公网IP。
内容的提问来源于stack exchange,提问作者Rq Bhatti
相关产品推荐
相关产品推荐

