I have two separate applications for a web app I am building.
Phoenix application ( which has UI ) - example_web
Elixir application + ecto ( which has business logic ) - example
Based on the ideas mentioned in this post , I decided to keep the persistence and web layer in different applications.
However, I ran into an error when trying to start the example_web
app after adding example
app as a dependency in mix.exs
file.
== Compilation error in file lib/example/repo.ex ==
** (ArgumentError) missing :adapter configuration in config :example, Example.Repo
lib/ecto/repo/supervisor.ex:70: Ecto.Repo.Supervisor.compile_config/2
lib/example/repo.ex:2: (module)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
example
has database config information similar to https://github.com/wojtekmach/acme_bank/blob/master/apps/bank/config/dev.exs
# lib/example/repo.ex
defmodule Example.Repo do
use Ecto.Repo, otp_app: :example
end
example_web
has similar config to https://github.com/wojtekmach/acme_bank/tree/master/apps/bank_web/config
I am not able to figure out where I am going wrong. Your help is appreciated.
PS: I am not using umbrella app here.
idi527
February 21, 2018, 12:28pm
2
Can you post configs for your repo?
> missing :adapter configuration in config :example, Example.Repo
indicates that you probably forgot to move repo configs from your âphoenix appâ.
PS: I am not using umbrella app here.
What are you using then? Can you post your directory structure?
These are two separate folders
chart ( example_web )
README.md _build/ assets/ config/ deps/ lib/ mix.exs mix.lock priv/ test/
example
README.md _build/ config/ deps/ lib/ mix.exs mix.lock priv/ test/
## example_web
use Mix.Config
# Configures the endpoint
config :chart, ChartWeb.Endpoint,
url: [host: "localhost"],
secret_key_base: "abcd",
render_errors: [view: ChartWeb.ErrorView, accepts: ~w(html json)],
pubsub: [name: Chart.PubSub,
adapter: Phoenix.PubSub.PG2]
# Configures Elixir's Logger
config :logger, :console,
format: "$time $metadata[$level] $message\n",
metadata: [:request_id]
import_config "#{Mix.env}.exs"
## example app
use Mix.Config
config :example, ecto_repos: [Example.Repo]
config :example, Example.Repo,
adapter: Ecto.Adapters.Postgres,
database: "example_repo",
hostname: "localhost"
Here are the dependencies on the phoenix app ( example_web / chart )
defp deps do
[
{:phoenix, "~> 1.3.0"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{ :example, path: "../example" }
]
end
idi527
February 21, 2018, 12:42pm
4
And where do you start Example.Repo
?
Itâs a supervised application. So there is an application.ex file which kickstarts the Example.Repo process.
I am able to interact with the example
app using the iex console. But when I try to integrate it with the phoenix app, I get this error.
Hope I was able to answer your question.
idi527
February 21, 2018, 1:44pm
6
Maybe try moving repo configuration out of example
and into example_web
.
That works but having the repo config in example_web
feels wrong to me. Let me explain why.
If I have two web apps, example_web1
and example_web2
both using the example
elixir app, I wouldnât want the config across two places.
Or may be I have got this all wrong in my head
Thanks for your help . Tomorrow I will give umbrella app a spin and see if it works.
All configs must be specified in the top-most application, including repo configs.
However, you can always âincludeâ the config from the dependency (itâs what I do⊠>.>).
Hi @overmindDL1 , Thanks for your inputs
Can you expand on that a little. Does the same rule apply for an umbrella app ? I had a look at the acme_bank/apps/bank_web/config at master · wojtekmach/acme_bank · GitHub and it did not have any repo config.
Hey guys, I built an umbrella app to support the two apps, and the compilation error caused by ecto config is gone
Feels like magic to me though. Any guides, pointers here why one works and the other doesnât ?
2 Likes
As in if you have built two-standalone Apps and combine them into one project, you can just include
(just like you include, say, dev.exs
from the main config.exs
) the ../deps/whateverproject/deps/config.exs
or so. I build my projects like this, no umbrella needed.
The first didnât work because you didnât specify itâs configurations in the top-level configs. ^.^;
1 Like