迁移Rails应用至新笔记本后执行rails db:migrate遇PostgreSQL角色错误
解决PostgreSQL角色不存在导致的Rails数据库迁移错误
嘿,我来帮你搞定这个问题!咱先捋明白根源:PostgreSQL默认会用当前系统的用户名作为数据库角色来登录,你新笔记本的用户名变成了my_laptop_name1,但你的PostgreSQL里根本没创建这个角色,所以执行rails db:migrate的时候就会报连接失败的错。
给你几个靠谱的解决办法,按顺序试就行:
办法一:创建对应的PostgreSQL角色
这是最直接的方式,给你的新用户名创建一个数据库角色:
- 打开终端,输入
psql postgres(如果提示权限不够,就用sudo -u postgres psql,输入系统密码后回车) - 进入PostgreSQL命令行后,执行创建角色的命令,把
my_laptop_name1换成你实际的用户名,密码也改成你想用的:
(加CREATE ROLE my_laptop_name1 WITH LOGIN SUPERUSER PASSWORD 'your_secure_password';SUPERUSER是因为开发环境需要足够权限操作数据库,生产环境别这么弄哈) - 输入
\q退出PostgreSQL命令行 - 现在再跑
rails db:migrate试试,应该就能连上了
办法二:修改Rails数据库配置文件指定用户名
如果不想创建新角色,也可以直接让Rails用已有的数据库角色(比如默认的postgres超级用户)来连接:
- 打开你的Rails项目,找到
config/database.yml文件 - 在
development、test这些环境的配置块里,添加或修改username和password字段,比如:default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: postgres password: your_postgres_password # 如果没设置过密码,可能留空或者试试你的系统密码 development: <<: *default database: your_app_name_development - 保存文件后,重新执行
rails db:migrate
额外小提示
如果执行命令的时候还是有问题,可以试试重启PostgreSQL服务:
- 如果你是用Homebrew装的,就跑
brew services restart postgresql - 用系统服务的话,就跑
sudo service postgresql restart
内容的提问来源于stack exchange,提问作者AmandaBP
相关产品推荐
相关产品推荐

