【发布时间】:2018-06-29 10:58:00
【问题描述】:
我有一个基于 Elixir 映像的 Docker 容器内的应用程序,它需要连接到数据库并使用 Gitlab 运行器运行测试。
构建阶段工作正常,但连接到数据库以运行测试时出现问题。我尝试连接到服务并运行另一个数据库容器,但从日志看来问题出在 Phoenix 应用程序上:
** (RuntimeError) :database is nil in repository configuration
lib/ecto/adapters/postgres.ex:121: Ecto.Adapters.Postgres.storage_up/1
lib/mix/tasks/ecto.create.ex:40: anonymous fn/3 in Mix.Tasks.Ecto.Create.run/1
(elixir) lib/enum.ex:675: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:675: Enum.each/2
(mix) lib/mix/task.ex:301: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:75: Mix.CLI.run_task/2
这就是config/test.exs 文件的样子
config :app, App.Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("POSTGRES_USER"),
password: System.get_env("POSTGRES_PASSWORD"),
database: System.get_env("POSTGRES_DB"),
hostname: System.get_env("POSTGRES_HOSTNAME"),
pool: Ecto.Adapters.SQL.Sandbox
这是跑步者的输出:
$ docker run --rm -t $CONTAINER echo $MIX_ENV $POSTGRES_USER $POSTGRES_HOSTNAME $POSTGRES_DB
test username db test_db
我正在尝试找出为什么会出现此错误 :database is nil,以及它是否与 Gitlab、Ecto 或 Phoenix 有关。
编辑
我在config/*.exs 文件中写入了静态值(由于某种原因它没有拾取它们),但现在它找不到 postgresql 主机名。虽然 postgresql 实例正在运行,但它找不到它。
我检查了实例是否使用docker ps 运行
【问题讨论】:
标签: docker elixir phoenix-framework gitlab-ci ecto