Phoenix创建数据库时mint依赖编译失败:找不到public_key.hrl
问题描述
使用Phoenix框架编写Hello World程序时,执行mix ecto.create创建数据库过程中,mint依赖编译失败。系统先提示安装rebar3以构建:telemetry,随后出现编译错误:
==> mint Compiling 1 file (.erl) src/mint_shims.erl:37:14: can't find include lib "public_key/include/public_key.hrl" % 37| -include_lib("public_key/include/public_key.hrl"). % | ^
当前环境版本信息:
$ elixir --version Erlang/OTP 25 [erts-13.1.5] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns] Elixir 1.14.0 (compiled with Erlang/OTP 24)
执行locate public_key仅返回Linux内核头文件路径,无法找到Erlang对应的public_key.hrl文件。
解决方案
问题核心是缺少Erlang public_key组件的相关文件,可按以下步骤排查修复:
1. 安装系统级依赖
不同Linux发行版需安装对应依赖,确保Erlang编译时能包含public_key组件:
- Debian/Ubuntu 系列:
sudo apt-get install libssl-dev erlang-public-key - CentOS/RHEL 系列:
sudo yum install openssl-devel erlang-public-key - Arch Linux:
sudo pacman -S openssl erlang
2. 重新通过asdf编译安装Erlang
若系统依赖已安装,但asdf此前安装的Erlang未包含public_key,需重新编译:
- 卸载当前Erlang版本:
(将版本号替换为你实际使用的OTP25具体版本)asdf uninstall erlang 25.1.5 - 设置编译选项,确保启用SSL及
public_key支持:export ERLANG_CONFIGURE_OPTIONS="--with-ssl=$(which openssl)" - 重新安装Erlang:
asdf install erlang 25.1.5 - 重新设置全局或项目本地Erlang版本:
# 全局设置 asdf global erlang 25.1.5 # 或仅当前项目设置 asdf local erlang 25.1.5
3. 验证修复
重新编译mint依赖,确认错误解决:
mix deps.compile mint
编译成功后,再次执行mix ecto.create即可完成数据库创建。
内容的提问来源于stack exchange,提问作者plombix
相关产品推荐
相关产品推荐

