依赖在编译期间看不到它的配置

Dependency cannot see its config during compilation

我正在尝试将应用程序打包到 docker 容器中。它依赖于 authable 十六进制包。

当运行:

docker build --tag "testing:0.1" --file Dockerfile .

...我得到以下编译错误:

== Compilation error on file lib/authable/repo.ex ==
** (ArgumentError) missing :adapter configuration in config :authable, Authable.Repo
    lib/ecto/repo/supervisor.ex:50: Ecto.Repo.Supervisor.compile_config/2
    lib/authable/repo.ex:6: (module)
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6

could not compile dependency :authable, "mix compile" failed. You can recompile this dependency with "mix deps.compile authable", update it with "mix deps.update authable" or clean it with "mix deps.clean authable"

该错误表明 Authable 在编译期间无法读取和初始化其 repo 配置:

  1. authable/repo.ex
  2. config.exs

我觉得我遗漏了一些简单的东西,但我无法弄清楚它是什么。

这里有一个重现问题的简单回购 – https://github.com/gmile/test_authable_docker.

更新。明确表示错误仅在 docker 期间编译时发生(例如,在主机 macOS 上编译时一切正常)。

这里的问题是您的 Dockerfile,在尝试 运行 mix deps.compile.

config/config.exs 尚不可用

原始 Dockerfile 内容:

# Install and compile project dependencies
COPY mix.* ./

RUN mix deps.get
RUN mix deps.compile
RUN mix ecto.create
RUN mix ecto.migrate -r Authable.Repo

# Add project sources
COPY . .

将此更改为在执行 mix compile 之前复制源可解决此问题:

....
RUN mix deps.get

# Add project sources
COPY . .

RUN mix deps.compile
...