Elixir build on Heroku review app fails with (ArgumentError) argument error :erlang.binary_to_atom(nil, :utf8) when running mix release
Elixir build on Heroku review app fails with (ArgumentError) argument error :erlang.binary_to_atom(nil, :utf8) when running mix release
去年,我们有一个 Phoenix 应用程序 运行 在 Heroku 上投入生产。
现在,我正尝试通过作为 Heroku 管道一部分的审核应用程序来启用应用程序的拉取请求版本 运行。
该应用程序具有三个 Heroku 构建包:
- https://buildpack-registry.s3.amazonaws.com/buildpacks/hashnuke/elixir.tgz
- https://github.com/gjaldon/heroku-buildpack-phoenix-static
- 我们自己的构建包(见下文)
我们自己的构建包非常简单。这是 bin/detect
脚本:
#!/bin/sh
exit 0
这里是 bin/compile
脚本:
#!/bin/bash
cd
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
步骤中失败了,但错误消息并没有让我很好地了解原因。我发现了一个 similar problem report,这表明我要解决的问题可能是由于缺少一个或多个环境变量所致。但是,我已经仔细检查并没有看到任何缺少的环境变量。
欢迎就我如何解决这个问题提出任何建议。
感谢 Aleksei Matiushkin 的评论,帮助我找到了问题的原因。
我引入了一个新的环境变量,我在 config/prod.exs
和 config/releases.exs
中都获取了它。当我从 config/prod.exs
中删除它时,mix release
成功构建了 Heroku 评论应用程序的版本。
我想这个故事的寓意是不要在 build-time 和运行时配置值。
去年,我们有一个 Phoenix 应用程序 运行 在 Heroku 上投入生产。
现在,我正尝试通过作为 Heroku 管道一部分的审核应用程序来启用应用程序的拉取请求版本 运行。
该应用程序具有三个 Heroku 构建包:
- https://buildpack-registry.s3.amazonaws.com/buildpacks/hashnuke/elixir.tgz
- https://github.com/gjaldon/heroku-buildpack-phoenix-static
- 我们自己的构建包(见下文)
我们自己的构建包非常简单。这是 bin/detect
脚本:
#!/bin/sh
exit 0
这里是 bin/compile
脚本:
#!/bin/bash
cd
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
步骤中失败了,但错误消息并没有让我很好地了解原因。我发现了一个 similar problem report,这表明我要解决的问题可能是由于缺少一个或多个环境变量所致。但是,我已经仔细检查并没有看到任何缺少的环境变量。
欢迎就我如何解决这个问题提出任何建议。
感谢 Aleksei Matiushkin 的评论,帮助我找到了问题的原因。
我引入了一个新的环境变量,我在 config/prod.exs
和 config/releases.exs
中都获取了它。当我从 config/prod.exs
中删除它时,mix release
成功构建了 Heroku 评论应用程序的版本。
我想这个故事的寓意是不要在 build-time 和运行时配置值。