AWS上PostgreSQL RDS无法执行rails db:create的问题排查
排查方向
- 核对配置中的用户信息与实际RDS用户匹配:错误提示认证失败的用户是
my_user,但你的database.yml开发/测试环境硬编码的用户名是use、密码是gresgres,和报错用户完全不符。先确认你本地Shell/EC2连接RDS时使用的用户名是my_user,那必须把database.yml里default块的username改成my_user,密码替换为你连接时用的正确密码。 - 验证生产环境环境变量正确性:如果执行的是生产环境的数据库创建命令,需确认
PG_RDS_USERNAME、PG_RDS_PASSWORD等环境变量是否正确设置。可以在终端执行echo $PG_RDS_USERNAME、echo $PG_RDS_PASSWORD查看变量值,检查是否存在拼写错误、大小写错误或特殊字符未正确处理的情况。 - 确认Rails执行的环境:
rails db:create默认使用开发环境配置,如果你实际要操作的是RDS生产环境,必须加上环境参数:RAILS_ENV=production rails db:create,否则会加载开发环境的错误用户配置,导致认证失败。 - 检查RDS用户的建库权限:虽然你能通过Shell连接RDS,但
my_user可能没有创建数据库的权限。可以在Shell连接后执行SQL命令:ALTER USER my_user CREATEDB;,给用户添加创建数据库的权限,rails db:create需要该权限才能执行。 - 清除Rails配置缓存:Rails可能缓存了旧的配置信息,执行
rails tmp:clear清除临时缓存文件后,再重新尝试执行数据库创建命令。
内容的提问来源于stack exchange,提问作者Mr Africa
相关产品推荐
相关产品推荐

