rafbgarcia
How to pass Repo for a package to use?
I’m trying to do this:
Main app has the database.
A package will hold a GraphQL API and its resolvers that use that database.
How can I accomplish that?
Thanks!
Marked As Solved
nbap
Hi @rafbgarcia,
you may specify the Repo on a configuration key in your app config file.
e.g
In the main app config.exs
config :your_package,
repo: MainApp.Repo
In your package
defmodule YourPackage do
def repo() do
Application.get_env(:your_package, :repo)
end
end
And reference the repo anywhere in your package like this
YourPackage.repo
I guess that will do but of course, you can tweak a little to adapt it to your needs.
Also Liked
mgwidmann
What you should do is have your Ecto schemas and GraphQL resolvers in the same package with the Ecto Repo, but don’t add it to your supervision tree. In order to do that you’ll have to configure the :otp_app part so your Ecto schema/GraphQL package’s repo. This would mean your non-main package would just define schemas, resolvers and a repo but wouldn’t start them or do anything (they’re just plain modules then). Be warned though, compilation will fail if you do not configure it! (i.e. in tests or other areas) This would look something like:
defmodule API.Repo do
@otp_app Application.get_env(:api, :otp_app)
use Ecto.Repo, otp_app: @otp_app, adapter: Ecto.Adapters.Postgres
use Absinthe.Ecto, otp_app: @otp_app
end
Then in your main app do the following in config:
config :api, otp_app: :main_app
# Config for Ecto repos & database connection here
config :main_app, ecto_repos: [API.Repo]
config :main_app, API.Repo,
# ...
Finally in your main app supervision tree:
def start(_type, _args) do
children = [
API.Repo,
]
# ...
end
rafbgarcia
I managed to get around that using a FakeRepo lol.
defmodule Enderecify.FakeRepo do
use Ecto.Repo,
otp_app: :enderecify_api,
adapter: Ecto.Adapters.Postgres
end
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance









