Phoenix服务器启动失败:Postgrex报错角色“postgres”不存在
嘿,这个问题我帮不少刚学Phoenix的朋友搞定过,别担心!你遇到的[error] Postgrex.Protocol (#PID<0.234.0>) failed to connect: ** (Postgrex.Error) FATAL 28000 (invalid_authorization_specification): role "postgres" does not exist错误,核心原因是你的PostgreSQL里还没创建Phoenix默认依赖的postgres数据库角色。
下面是一步步的解决步骤:
确认PostgreSQL已安装并运行
先在终端里输入psql --version,如果能显示版本号说明安装成功;如果没反应,先完成PostgreSQL的安装。然后确保服务在运行:- Mac(Homebrew安装):执行
brew services start postgresql - Ubuntu/Debian:执行
sudo systemctl start postgresql - Windows:在系统服务列表里找到PostgreSQL并启动
- Mac(Homebrew安装):执行
创建postgres数据库角色
打开终端,输入psql postgres进入PostgreSQL的命令行交互界面,然后依次执行以下命令:CREATE ROLE postgres WITH LOGIN PASSWORD 'your_password_here'; -- 替换成你想设置的密码 ALTER ROLE postgres CREATEDB; -- 赋予创建数据库的权限,Phoenix需要这个执行完后输入
\q退出交互界面。核对Phoenix的数据库配置
打开项目里的config/dev.exs文件,找到数据库配置块,确保内容和你刚设置的一致:config :your_app_name, YourAppName.Repo, username: "postgres", password: "your_password_here", -- 这里填你刚才设置的密码 database: "your_app_name_dev", hostname: "localhost", pool_size: 10注意把
your_app_name换成你实际的应用名称。创建应用数据库并重启服务
在项目根目录的终端里执行mix ecto.create,这个命令会用刚才的角色创建对应的开发数据库。等命令执行成功后,再运行mix phoenix.server,应该就能正常启动了!
如果还是有问题,大概率是密码没匹配或者PostgreSQL服务没跑起来,再检查一遍就行~
内容的提问来源于stack exchange,提问作者cameron g

