Starman3787
DBConnection Compilation Error
hey,
i’m new to elixir so am very unfamiliar with how it all works
i am trying to connect to a MariaDB database using the mariaex driver
i’ve added it to the mix.exs file, as shown:
defmodule Backend.MixProject do
use Mix.Project
def project do
[
app: :backend,
version: "0.1.0",
elixir: "~> 1.9",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
def application do
[
mod: {Backend.Application, []},
extra_applications: [:logger, :cowboy, :plug, :poison]
]
end
defp deps do
[
{:plug_cowboy, "~> 1.0.0"},
{:poison, "~> 3.1"},
{:mariaex, "~> 0.9.1"}
]
end
end
…and i’ve also run mix deps.get
within the application.ex file (where Backend.Application is defined), i have included the line:
Mariaex.start_link(hostname: "localhost", port: "3307", username: "removed", password: "removed", database: "removed")
which according to the docs, should start a connection to the database
however when running iex -S mix in order to run the program, this compilation error is returned:
== Compilation error in file lib/backend/application.ex ==
** (exit) exited in: GenServer.call(DBConnection.Watcher, {:watch, DBConnection.ConnectionPool.Supervisor, {DBConnection.ConnectionPool.Pool, {#PID<0.190.0>, #Reference<0.1191833633.3142189059.94268>, Mariaex.Protocol, [hostname: "localhost", port: "3307", username: "removed", password: "removed", database: "removed"]}}}, :infinity)
** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
and i have no clue what to do to fix this, nor can i find any solutions
any pointers or suggestions for what i could do or try would be hugely appreciated
Marked As Solved
josevalim
Can you please include the whole application file? You should start the connection to the database inside the start/2 function, typically as part of the supervision tree. Use mix new my_app —sup to have a better idea. Then, in children, you will do something like this:
{Mariaex, name: :my_app, password: …, …}
Also Liked
Starman3787
thanks for the response, this seems to work now:
defmodule Backend.Application do
@moduledoc false
use Application
def start(_type, _args) do
children = [
Plug.Adapters.Cowboy.child_spec(scheme: :http, plug: Backend.Router, options: [port: 8085]),
Mariaex.child_spec(hostname: "localhost", port: "3307", username: "removed", password: "removed", database: "removed")
]
IO.puts("Worker started on port 8085")
opts = [strategy: :one_for_one, name: Backend.Supervisor]
Supervisor.start_link(children, opts)
end
end
i had called the Maria.start_link() function above the line use Application, which in hindsight seems like a very obvious and careless mistake now on my part
i’ve tried to write this in the way you said, i assume this is what you meant by “supervision tree”?
josevalim
Yes, that’s the way to go. I think you are only missing the name option, which you will pass as argument to Mariaex.query functions and similar.
Last Post!
josevalim
Yes, that’s the way to go. I think you are only missing the name option, which you will pass as argument to Mariaex.query functions and similar.
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
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









