模块 EEx 不可用

module EEx is not available

我正在创建一个应用程序,当我 运行 它在本地运行时 运行 没问题。但是,当我 运行 它在 docker 容器中时,在 运行 期间我得到错误:

** (UndefinedFunctionError) function EEx.eval_string/2 is undefined (module EEx is not available)

我需要在 extra_applicatoins: 中指定 :eex 吗?如果可以,有人可以指出我的文档吗?我以为 Eex 和 Elixir 一起来了。

这是我的 mix.exs 文件:

# mix.exs

  def application do
    [
      mod: {MyApp.Application, []},
      extra_applications: [:logger]
    ]
  end

  defp deps do
    [
      {:tzdata, "~> 1.0.3"},
      {:bamboo, "~> 1.5"}
    ]
  end

Docker 文件:

FROM elixir:1.10 as build

ENV MIX_ENV=prod
ENV LANG=C.UTF-8

RUN mix local.hex --force && mix local.rebar --force

ARG LOG_LEVEL=info

RUN mkdir /build

WORKDIR /build

COPY . .

RUN mix deps.get && \
    mix release --path /release && \
    rm -rf /build

WORKDIR /release

ENTRYPOINT ["/release/bin/my_app"]

构建版本时,只有 内核被打包到(:elixir 应用程序中 OTP。)

:eex:mix:iex 和其他一些 extra 库都不包括在内。甚至 :ssl:crypto 在本地开发环境中可用 are not included into release by default。目标是明确包含任何可能不需要的内容,以避免发布臃肿。

我不确定它是否明确记录在某处,但您可以查看参考资料 Phoenix.MixProject,其中还包括 :eex 应用程序。

出于同样的原因,任何调用 Mix.env/0(或任何其他 Mix 函数)的尝试都会以同样的方式在发布中失败。