Heroku review应用程序上的Elixir构建失败,运行mix release时出现(ArgumentError)参数错误:erlang.binary_to_atom(nil,:utf8)
我们有一个Phoenix应用程序,它已经在Heroku上运行了一年 现在,我正试图使应用程序的拉请求版本能够作为Heroku管道的一部分通过review应用程序运行 该应用程序有三个Heroku构建包:Heroku review应用程序上的Elixir构建失败,运行mix release时出现(ArgumentError)参数错误:erlang.binary_to_atom(nil,:utf8),heroku,elixir,Heroku,Elixir,我们有一个Phoenix应用程序,它已经在Heroku上运行了一年 现在,我正试图使应用程序的拉请求版本能够作为Heroku管道的一部分通过review应用程序运行 该应用程序有三个Heroku构建包: 我们自己的构建包(见下文) 我们自己的构建包非常简单。以下是bin/detect脚本: #!/bin/sh exit 0 #!/bin/bash cd $1 mix release 下面是bin/compile脚本: #!/bin/sh exit 0 #!/bin/bash c
bin/detect
脚本:
#!/bin/sh
exit 0
#!/bin/bash
cd $1
mix release
下面是bin/compile
脚本:
#!/bin/sh
exit 0
#!/bin/bash
cd $1
mix release
虽然构建一直在为生产工作,但不幸的是,对于设计用于启用审查应用程序的PR来说,当它到达最终构建包时,它失败了。以下是Heroku构建的相关输出:
-----> https://github.com/orgname/buildpack-name.git app detected
** (ArgumentError) argument error
:erlang.binary_to_atom(nil, :utf8)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
(stdlib) erl_eval.erl:878: :erl_eval.expr_list/6
(stdlib) erl_eval.erl:236: :erl_eval.expr/5
(stdlib) erl_eval.erl:228: :erl_eval.expr/5
(stdlib) erl_eval.erl:878: :erl_eval.expr_list/6
(stdlib) erl_eval.erl:404: :erl_eval.expr/5
! Push rejected, failed to compile https://github.com/orgname/buildpack-name.git app.
! Push failed
因此,在mix-release
步骤中,它似乎失败了,但错误消息并没有告诉我原因。我发现了一个问题,这表明我试图解决的问题可能是由于缺少一个或多个环境变量。但是,我已经仔细检查了一遍,没有发现任何缺少的环境变量
任何关于我如何解决这个问题的建议都是非常受欢迎的。感谢他的评论,他的评论帮助我找到了问题的原因
我引入了一个新的环境变量,在config/prod.exs
和config/releases.exs
中都获取了该变量。当我将它从config/prod.exs
中删除时,然后mix-release
成功地为Heroku review应用程序构建了版本
我想这个故事的寓意是不要在构建时和运行时都配置值。只是澄清一下:您是否知道
mix-release
确实编译config.exs
,但在发布启动期间它只加载releases.exs
?@AlekseiMatiushkin谢谢。是的,我一直在复习,以确保我了解这个问题的各个方面。我目前想弄清楚的是,在版本方面,review应用程序环境与生产环境有什么不同。无论如何,这肯定是一个未解决的环境变量问题。尝试在应用程序上打印出所有这些内容。启动/2
并查看缺少什么?