You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用edeliver部署Phoenix应用时遇Application.compile_env/4匹配错误

问题解决指南:Phoenix 1.6.15 edeliver构建错误及部署方案建议

一、解决Application."MACRO-compile_env"/4函数子句匹配错误

这个错误的核心原因是构建环境与开发环境的Elixir版本不匹配,或代码中Application.compile_env的调用参数有误:

  1. 对齐Elixir版本要求
    Phoenix 1.6.15强制要求Elixir 1.12及以上版本,而Application.compile_env/3是Elixir 1.12才引入的宏。如果edeliver构建时使用的Elixir版本低于1.12,就会触发该错误:
  • 先执行elixir -v确认开发环境的Elixir版本
  • 在项目根目录的.deliver/config文件中添加配置,强制edeliver使用对应版本:
    export ELIXIR_VERSION="你的Elixir版本号" # 例如 export ELIXIR_VERSION="1.14.4"
    
  1. 检查Guardian配置代码
    打开lib/pxf/auth/guardian.ex,排查所有Application.compile_env调用:
  • 确保调用参数为3个:Application.compile_env(:你的应用名, Guardian, 默认值),如果写了4个参数,直接删除多余部分
  • 示例正确写法:
    secret_key = Application.compile_env(:pxf, Guardian, secret_key: "") |> Keyword.get(:secret_key)
    
  1. 验证修复效果
    先在本地模拟生产环境编译:
MIX_ENV=prod mix compile

若编译通过,再执行mix edeliver build release --verbose

二、关于edeliver是否适合当前部署的建议

edeliver曾经是Elixir生态的主流部署工具,但目前官方更推荐使用内置的mix release,原因如下:

  • mix release从Elixir 1.9开始内置,无需额外安装依赖,配置更简洁
  • Phoenix 1.6默认支持mix release,官方维护和更新更及时
  • mix release直接生成独立可执行文件,支持热更新、环境变量配置、容器化部署等现代需求
  • edeliver更新频率较低,对新版本Phoenix和Elixir的适配存在滞后

如果切换到mix release,基础步骤:

  • 确认mix.exs中releases配置正确(Phoenix 1.6默认已配置)
  • 执行MIX_ENV=prod mix release生成发布包
  • 将_build/prod/rel/你的应用名目录部署到服务器,通过bin/你的应用名 start启动服务

内容的提问来源于stack exchange,提问作者tmariaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:44:57